Expand my Community achievements bar.

SOLVED

xtk.session.Write for memo element

Avatar

Level 9

I have a temporary schema that has a bunch of normal attributes and a memo element. When I use xtk.session.Write with an XML object, the attributes update fine, but the memo element (IrMessage) is blank. Any idea how to template in an XML element in the JS?

 

 

 

<!-- Key Fields -->
    <attribute label="Workflow Id" length="32" name="workflowId" notNull="true" required="true"
               type="string"/>
    <attribute label="Service Order Id" length="12" name="serviceOrderId" notNull="true"
               required="true" type="string"/>
    <attribute label="Switch Document Id" length="20" name="switchDocumentId" notNull="true"
               required="true" type="string"/>
    
    <!-- data fields -->
    <attribute label="EDM Link" length="256" name="edmLink" type="string"/>
    <attribute label="bit.ly code" length="12" name="bitly" type="string"/>

    <element label="IR Message" name="IrMessage" type="memo"/>
    <attribute label="IR Description" name="IrDescription" type="string"/>
writeRecord: function ( data ) {
   
      try{ 
        xtk.session.Write(
          <TempData xtkschema="ori:TempData" 
            _operation="insert"
            _key="@switchDocumentId,@serviceOrderId,@workflowId"
            switchDocumentId={data.switchDocumentId}
            serviceOrderId={data.serviceOrderId}
            workflowId={vars.thisWorkflowId}
            edmLink={data.edmLink}  
            bitly={data.bitly} 
            IrDescription = {data.IrDescription}>
            <IrMessage>{data.IrMessage}</IrMessage>
          </TempData>);
      } catch (e) {
        logError("Something bad happened in writeRecord: " + e);
      }
}

 

 

 

 

 

1 Accepted Solution

Avatar

Correct answer by
Level 9

Managed to do it via sqlExec, but interested to know why the above xtk.session.Write method wouldn't work

try {
  sqlExec("insert into oritempdata (sbitly,sedmLink,sIrDescription,mIrMessage,sswitchDocumentId,sserviceOrderId,sworkflowId) values ('" + data.bitly + "','" + data.edmLink + "','" + data.IrDescription + "','" + data.IrMessage + "','" + data.switchDocumentId + "','" + data.serviceOrderId + "','" + vars.thisWorkflowId + "');");
} catch (e) {
   logError("Something bad happened in writeRecord: " + e);
}

View solution in original post

4 Replies

Avatar

Correct answer by
Level 9

Managed to do it via sqlExec, but interested to know why the above xtk.session.Write method wouldn't work

try {
  sqlExec("insert into oritempdata (sbitly,sedmLink,sIrDescription,mIrMessage,sswitchDocumentId,sserviceOrderId,sworkflowId) values ('" + data.bitly + "','" + data.edmLink + "','" + data.IrDescription + "','" + data.IrMessage + "','" + data.switchDocumentId + "','" + data.serviceOrderId + "','" + vars.thisWorkflowId + "');");
} catch (e) {
   logError("Something bad happened in writeRecord: " + e);
}

Avatar

Community Advisor

Try xtk.persist.Write(). The sqlExec() call needs special access right and is not as safe/user-friendly- cf your example code where there aren't bind variables or even input escape, so a ' in IrDescription will crash the script.

Avatar

Level 9
Thanks for the tip - do you have any examples of how to use xtk.persist.Write() with a memo field? As you can see above I couldnt get the xtk.session.Write() to work with the memo field so had to hack the sqlExec() together as a workaround

Avatar

Community Advisor

Hi @Darren_Bowers,
Came across the same recently and in case we just want to avoid the sqlExec from rights and security pov, the following approach works.

Just tried pass this as an child element instead as an attribute. Got some inspiration by looking at the "Edit XML" of the data in console.

 

writeRecord: function ( data ) {
   
      try{ 
        xtk.session.Write(
          <TempData xtkschema="ori:TempData" 
            _operation="insert"
            _key="@switchDocumentId,@serviceOrderId,@workflowId"
            switchDocumentId={data.switchDocumentId}
            serviceOrderId={data.serviceOrderId}
            workflowId={vars.thisWorkflowId}
            edmLink={data.edmLink}  
            bitly={data.bitly} 
            IrDescription = {data.IrDescription}>
            <IrMessage><![CDATA[your text here]]</IrMessage>
          </TempData>);
      } catch (e) {
        logError("Something bad happened in writeRecord: " + e);
      }
}

 

Thanks,

Deb