Announcement

Collapse
No announcement yet.
X
  • Filter
  • Time
Clear All
new posts

    Operation type 'fetch' not supported by this DataSource with Smartclient 14.1

    Hi there, we have successfully migrated to Smartclient 14.0 but we are now trying to migrate to Smartclient 14.1 and having problems with our datasources. The client-side datasources seem to load fine but when we try to fetch data from our server, all of our datasources are giving this type of failure message:

    {
    affectedRows:0,
    data:"Operation type 'fetch' not supported by this DataSource (ZScore)",
    invalidateCache:false,
    isDSResponse:true,
    queueStatus:-1,
    status:-1
    }

    You can see below we have even tried explicitly setting the operationBindings on all of our datasources (although that has never been necessary in the past) but we still get this message. Is there some new server-side configuration with 14.1 that doesn't exist in 14.0 that we are missing?



    Code:
    <DataSource ID="ZScore"
    
    dataURL="smartclient.form"
    
    >
    
    
    
    
    <operationBindings>
    
    <operationBinding operationType="fetch"/>
    
    <operationBinding operationType="add"/>
    
    <operationBinding operationType="update"/>
    
    <operationBinding operationType="remove"/>
    
    </operationBindings>
    
    
    
    
    <fields>
    
    <field name="ZScore" type="float" title="" primaryKey="true" />
    
    <field name="cumulativeProbability" type="float" title="" />
    
    <field name="initialScreenLoad" type="boolean" hidden="true" />
    
    <field name="clientComponentName" type="text" title="" hidden="true" />
    
    <field name="clientComponentID" type="text" title="" hidden="true" />
    
    </fields>
    
    </DataSource>

    Here is how we are loading smartclient:



    Code:
    <isomorphic:loadISC skin="Graphite" isomorphicURI="${iso_version_dir}isomorphic/" includeModules="RichTextEditor,Drawing,Charts" />

    Here is how we are loading all of our datasources:

    Code:
    <%@ taglib uri="/WEB-INF/iscTaglib.tld" prefix="isomorphic"%>
    
    
    
    
    
    
    
    <isomorphic:XML>
    
    <jsp:include page="/shared/ds/StatusOptions.ds.xml"></jsp:include>
    
    <jsp:include page="/shared/ds/ATUser.ds.xml"></jsp:include>
    
    <jsp:include page="/shared/ds/ATUsageStats.ds.xml"></jsp:include>
    
    <jsp:include page="/shared/ds/ATUserRecover.ds.xml"></jsp:include>
    
    <jsp:include page="/shared/ds/ATUserSettings.ds.xml"></jsp:include>
    
    <jsp:include page="/shared/ds/CustomFormula.ds.xml"></jsp:include>
    
    <jsp:include page="/shared/ds/CustomField.ds.xml"></jsp:include>
    
    <jsp:include page="/shared/ds/CustomFieldInstance.ds.xml"></jsp:include>
    
    <jsp:include page="/shared/ds/ATUserViewState.ds.xml"></jsp:include>
    
    <jsp:include page="/shared/ds/ATUserViewStateAssetDashboard.ds.xml"></jsp:include>
    
    <jsp:include page="/shared/ds/ATUserAlert.ds.xml"></jsp:include>
    
    <jsp:include page="/shared/ds/ATUserExternalApp.ds.xml"></jsp:include>
    
    <jsp:include page="/shared/ds/ExternalAppSettings.ds.xml"></jsp:include>
    
    <jsp:include page="/shared/ds/ExternalAppHistory.ds.xml"></jsp:include>
    
    <jsp:include page="/shared/ds/Fund.ds.xml"></jsp:include>
    
    <jsp:include page="/shared/ds/FundExternalApp.ds.xml"></jsp:include>
    
    <jsp:include page="/shared/ds/FundExternalAppData.ds.xml"></jsp:include>
    
    <jsp:include page="/shared/ds/FundAssetReport.ds.xml"></jsp:include>
    
    <jsp:include page="/shared/ds/FundAssetSector.ds.xml"></jsp:include>
    
    <jsp:include page="/shared/ds/FundAnalystAssessment.ds.xml"></jsp:include>
    
    <jsp:include page="/shared/ds/FundAssetExternalAppData.ds.xml"></jsp:include>
    
    <jsp:include page="/shared/ds/FundAssetExternalApp.ds.xml"></jsp:include>
    
    <jsp:include page="/shared/ds/FundSector.ds.xml"></jsp:include>
    
    <jsp:include page="/shared/ds/FundSectorGroup.ds.xml"></jsp:include>
    
    <jsp:include page="/shared/ds/FundScenarioTemplate.ds.xml"></jsp:include>
    
    <jsp:include page="/shared/ds/FundAssetEditable.ds.xml"></jsp:include>
    
    <jsp:include page="/shared/ds/FundAsset.ds.xml"></jsp:include>
    
    <jsp:include page="/shared/ds/Asset.ds.xml"></jsp:include>
    
    <jsp:include page="/shared/ds/Ticker.ds.xml"></jsp:include>
    
    <jsp:include page="/shared/ds/TickerExternalAppData.ds.xml"></jsp:include>
    
    <jsp:include page="/shared/ds/AssetFile.ds.xml"></jsp:include>
    
    <jsp:include page="/shared/ds/DepartmentFile.ds.xml"></jsp:include>
    
    <jsp:include page="/shared/ds/DepartmentSettings.ds.xml"></jsp:include>
    
    <jsp:include page="/shared/ds/AssetNotes.ds.xml"></jsp:include>
    
    <jsp:include page="/shared/ds/HAssetNotes.ds.xml"></jsp:include>
    
    <jsp:include page="/shared/ds/AssetScenario.ds.xml"></jsp:include>
    
    <jsp:include page="/shared/ds/FundAssetTradeHistory.ds.xml"></jsp:include>
    
    <jsp:include page="/shared/ds/AnalysisConfidenceOptions.ds.xml"></jsp:include>
    
    <jsp:include page="/shared/ds/ExpectedReturnCalculationOptions.ds.xml"></jsp:include>
    
    <jsp:include page="/shared/ds/AnnualizeReturnOptions.ds.xml"></jsp:include>
    
    <jsp:include page="/shared/ds/SecurityMasterSymbolLookup.ds.xml"></jsp:include>
    
    <jsp:include page="/shared/ds/SecurityMasterOptionsLookup.ds.xml"></jsp:include>
    
    <jsp:include page="/shared/ds/SecurityType.ds.xml"></jsp:include>
    
    <jsp:include page="/shared/ds/ReportQueue.ds.xml"></jsp:include>
    
    <jsp:include page="/shared/ds/ReportResult.ds.xml"></jsp:include>
    
    <jsp:include page="/shared/ds/ZScore.ds.xml"></jsp:include>
    
    </isomorphic:XML>


    Final thing related to datasources, there is one datasource that is not loading in the Datasource tab in the smartclient dev console at all even though it seems to be loading just fine client side. That may be a clue so figured I would share this one too. This is how it is resolving client-side:


    Code:
    isc.DataSource.create({
        spring: "urn:jsptld:/WEB-INF/spring.tld",
        dataURL: "smartclient.form",
        primaryKeyFieldAT: "userID",
        operationBindings: [{
            operationType: "fetch"
        }, {
            operationType: "add"
        }, {
            operationType: "update"
        }, {
            operationType: "remove"
        }],
        allowAdvancedCriteria: true,
        ID: "ATUser",
        fields: [{
            name: "userID",
            type: "text",
            title: "\n\tEmail\n\t",
            validators: [],
            primaryKey: true,
            formatCellValue: function(value, record, rowNum, colNum) {
                return valueMapFindValueWithRawKey(isc.getKeyForValue(value, userValueMap), userValueMap);
            }
        }, {
            name: "firstName",
            type: "text",
            title: "\n\tFirst Name\n\t",
            validators: []
        }, {
            name: "middleInitial",
            type: "text",
            title: "\n\tMI\n\t",
            validators: []
        }, {
            name: "lastName",
            type: "text",
            title: "\n\tLast Name\n\t",
            validators: []
        }, {
            name: "email",
            type: "text",
            title: "\n\tE-Mail\n\t",
            validators: []
        }, {
            name: "phone",
            type: "text",
            title: "\n\tPhone\n\t",
            validators: []
        }, {
            name: "phoneExt",
            type: "integer",
            title: "\n\tPhone Ext\n\t",
            validators: []
        }, {
            name: "companyID",
            type: "integer",
            title: "\n\tCompany\n\t",
            validators: []
        }, {
            name: "departmentID",
            type: "integer",
            title: "\n\tDepartment\n\t",
            validators: []
        }, {
            name: "roleID",
            type: "integer",
            title: "\n\tRole\n\t",
            validators: []
        }, {
            name: "fetchFromLocalAssetCachePreference",
            type: "boolean",
            title: "\n\tFetch from Local Cache\n\t",
            validators: []
        }, {
            name: "disableAssetDashboardZoomPrompt",
            type: "boolean",
            title: "\n\tDisable Asset Dashboard Zoom Prompt\n\t",
            validators: []
        }, {
            name: "assetDashboardPopOutEnabled",
            type: "boolean",
            title: "\n\tAsset in new window\n\t",
            validators: []
        }, {
            name: "hoverDelayPreference",
            type: "integer",
            title: "\n\tHover Delay\n\t",
            validators: []
        }, {
            name: "settingsChangePreference",
            type: "text",
            title: "\n\tSettings State\n\t",
            validators: []
        }, {
            name: "userDescription",
            type: "text",
            validators: []
        }, {
            name: "roleDescription",
            type: "text",
            validators: []
        }, {
            name: "isFirstLogin",
            type: "boolean",
            validators: []
        }, {
            name: "departmentConfigurationOverrides",
            hidden: true,
            title: "",
            validators: []
        }, {
            name: "userConfigurationOverrides",
            hidden: true,
            title: "",
            validators: []
        }, {
            name: "departmentLayoutOverrides",
            hidden: true,
            title: "",
            validators: []
        }, {
            name: "userLayoutOverrides",
            hidden: true,
            title: "",
            validators: []
        }, {
            name: "changePasswordNextLogin",
            type: "boolean",
            validators: []
        }, {
            name: "atSupportUser",
            type: "boolean",
            validators: []
        }, {
            name: "externalAppUser",
            type: "boolean",
            validators: []
        }, {
            name: "enabled",
            type: "boolean",
            validators: []
        }, {
            name: "noRoleUser",
            type: "boolean",
            validators: []
        }, {
            name: "viewOnlyUser",
            type: "boolean",
            validators: []
        }, {
            name: "viewStateFundAssetsGrid",
            hidden: true,
            title: "",
            validators: []
        }, {
            name: "viewStateFundAssetsGridGroupBy",
            hidden: true,
            title: "",
            validators: []
        }, {
            name: "viewStateFundAssetsGridSelectedView",
            hidden: true,
            title: "",
            validators: []
        }, {
            name: "viewStateDefaultID",
            hidden: true,
            title: "",
            type: "integer",
            validators: []
        }, {
            name: "viewStateFilterFundID",
            hidden: true,
            title: "",
            type: "integer",
            validators: []
        }, {
            name: "viewStateFilterUserID",
            hidden: true,
            title: "",
            type: "integer",
            validators: []
        }, {
            name: "viewStateFilterStatusID",
            hidden: true,
            title: "",
            type: "integer",
            validators: []
        }, {
            name: "viewStateFundProfileCollapse",
            hidden: true,
            title: "",
            type: "boolean",
            validators: []
        }, {
            name: "viewStateTickerSearch",
            hidden: true,
            title: "",
            validators: []
        }, {
            name: "viewStateOperation",
            hidden: true,
            title: "",
            validators: []
        }, {
            name: "viewStateSaved",
            hidden: true,
            title: "",
            type: "boolean",
            validators: []
        }, {
            name: "version",
            hidden: true,
            title: "",
            type: "integer",
            validators: []
        }, {
            name: "modified",
            type: "date",
            title: "\n\tUpdated<br>Date\n\t",
            validators: []
        }, {
            name: "currentPassword",
            type: "text",
            title: "\n\tCurrent Password\n\t",
            validators: []
        }, {
            name: "newPassword",
            type: "text",
            title: "\n\tNew Password\n\t",
            validators: [{
                otherField: "confirmNewPassword",
                type: "custom",
                condition: function(field, validator, value) {
                    var otherValue;
                    if (field != null && field.form != null) {
                        otherValue = field.form.getValue(validator.otherField);
                    } else {
                        return true;
                    }
                    return (value == otherValue);
                },
                errorMessage: "\n \tYou must enter the same password for New Password and Confirm New Password.\n "
            }]
        }, {
            name: "confirmNewPassword",
            type: "text",
            title: "\n\tConfirm New Password\n\t",
            validators: []
        }, {
            multiple: true,
            name: "atUserViewStatesJSON",
            displayOnly: "true",
            hidden: true,
            type: "ATUserViewState",
            validators: []
        }, {
            multiple: true,
            name: "atUserAlertsJSON",
            displayOnly: "true",
            hidden: true,
            type: "ATUserAlert",
            validators: []
        }, {
            multiple: true,
            name: "atUserExternalAppsJSON",
            displayOnly: "true",
            hidden: true,
            type: "ATUserExternalApp",
            validators: []
        }, {
            name: "historicalDate",
            type: "datetime",
            title: "\n\tHistorical<br>Date\n\t",
            formatType: "date",
            validators: [],
            headerMenu: {
                title: "Description"
            }
        }, {
            validators: [],
            headerMenu: {
                title: "Description"
            },
            name: "holdingsDate",
            type: "datetime",
            title: "\n\tHoldings<br>Date\n\t",
            formatType: "date",
            formatCellValue: function(value, record, rowNum, colNum) {
                if (value != null) {
                    var today = new Date();
                    return formatDate(value, today);
                }
            }
        }, {
            name: "passwordRecoveryQuestion",
            type: "text",
            title: "\n\tPassword Recovery Question\n\t",
            validators: [{
                max: 128.0,
                min: 1.0,
                type: "lengthRange"
            }]
        }, {
            name: "passwordRecoveryAnswer",
            type: "text",
            title: "\n\tPassword Recovery Answer\n\t",
            validators: [{
                max: 128.0,
                min: 1.0,
                type: "lengthRange"
            }, {
                otherField: "confirmPasswordRecoveryAnswer",
                type: "custom",
                condition: function(field, validator, value) {
                    var otherValue;
                    if (field != null && field.form != null) {
                        otherValue = field.form.getValue(validator.otherField);
                    } else {
                        return true;
                    }
                    if (value != null && otherValue != null) {
                        return (value.toLowerCase() == otherValue.toLowerCase());
                    } else {
                        return (value == otherValue);
                    }
                },
                errorMessage: "\n\t\t\t\tYou must enter the same answer for Password Recovery Answer and Confirm Password Recover Answer.\n\t\t\t"
            }]
        }, {
            name: "confirmPasswordRecoveryAnswer",
            type: "text",
            title: "\n\tConfirm Password Recovery Answer\n\t",
            validators: [{
                max: 128.0,
                min: 1.0,
                type: "lengthRange"
            }]
        }, {
            name: "require2FA",
            type: "boolean",
            title: "\n\tUse Two Factor Authentication\n\t",
            validators: []
        }, {
            name: "canChange2FA",
            hidden: true,
            type: "boolean",
            validators: []
        }, {
            name: "key",
            type: "text",
            validators: []
        }, {
            name: "qrcode",
            type: "image",
            validators: []
        }, {
            name: "validationCode2FA",
            type: "text",
            validators: []
        }, {
            name: "validate2FA",
            hidden: true,
            type: "boolean",
            validators: []
        }, {
            name: "validated2FA",
            hidden: true,
            type: "boolean",
            validators: []
        }, {
            name: "validatePasswordRecoverySecurityAnswer",
            hidden: true,
            type: "boolean",
            validators: []
        }, {
            name: "validatedPasswordRecoverySecurityAnswer",
            hidden: true,
            type: "boolean",
            validators: []
        }, {
            name: "settingsDialog",
            hidden: true,
            title: "",
            type: "boolean",
            validators: []
        }, {
            name: "createdUserName",
            displayOnly: "true",
            type: "text",
            title: "\n\tCreated<br>By\n\t",
            validators: []
        }, {
            name: "created",
            displayOnly: "true",
            type: "date",
            title: "\n\tCreated<br>Date\n\t",
            validators: []
        }, {
            name: "initialScreenLoad",
            hidden: true,
            type: "boolean",
            validators: []
        }, {
            name: "clientComponentName",
            hidden: true,
            title: "",
            type: "text",
            validators: []
        }, {
            name: "clientComponentID",
            hidden: true,
            title: "",
            type: "text",
            validators: []
        }, {
            name: "modifiedUserID",
            displayOnly: "true",
            hidden: true,
            title: "",
            type: "integer",
            validators: []
        }, {
            name: "createdUserID",
            displayOnly: "true",
            hidden: true,
            title: "",
            type: "integer",
            validators: []
        }]
    })





    #2
    These data sources lack a “serverType“ declaration, and have no similar declaration that would tell you how they are supposed to be handled on the server.

    Perhaps you intend them to be SQL and this code dates back to the very very old days when that was assumed? Adding serverType=“sql” should solve this.

    We could maybe create a setting for a default class if this is difficult.

    Comment


      #3
      Hi, these data soruces are not "sql" datasources and they are "generic" which is the default meaning our java server handles them and constructs a response. And, they work as is with smartclient 14.0 (plus all the way back to Smartclient 6 that way). So, I'm wondering why they are not working with Smartclient 14.1. I did hard-code serverType="generic" into a few of them to see if that helps but we still get the same error.

      Comment


        #4
        Hi there, we can close out this ticket. It turns out we had some jsp tags not resolving correctly with our upgrade on our side and that was corrupting our client-side datasources where we were dynamically adding some params to the DataSource.dataURL value and it was causing dataURL to be removed and thus corrupting our client-server integration entirely. Thanks for listening!

        Comment


          #5
          Makes sense - we were going to point out, those DataSources have no information at all about how to execute their operations, so there has to be more somewhere.

          Comment

          Working...
          X