Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Create Query:

Code Block
languagexmlruby
titleCreate DataModel Query
linenumberstrue
<Query>#
Query:
 <Create> Create:
   <VendorInfo> VendorInfo:
     <vendorName>Phidget</vendorName> vendorName: "Phidget"
    <vendorTitle>Sensor Provider</vendorTitle> vendorTitle:    </VendorInfo>
  </Create>
</Query>"Sensor Provider"

Create Query Result:

Note that VendorSysId of type Sid is automatically generated without specifying the value in Create Query Statement.

Code Block
languagexmlruby
titleCreate DataModel Query Results
linenumberstrue
<Create#
Create(Status=: "Success">):
  <VendorInfo>VendorInfo:
    <VendorSysId>KNTJ5MYXAAAAUAABA7EIY2FH</VendorSysId>
VendorSysId: "KNTJ5MYXAAAAUAABA7EIY2FH":
   <vendorName vendorName(Status=: "Success+Created:1:1457715589911;", Value=: "Phidget"/>)
    <vendorTitle Status=vendorTitle(Status: "Success+Created:1:1457715589914;", Value=: "Sensor Provider"/>
  </VendorInfo>
</Create>)

Find Query:

Code Block
languagexmlruby
titleFind DataModel Query
linenumberstrue
<Query>#
Query:
 <Find Find(format=: "all">):
    <VendorInfo>VendorInfo:
      <vendorName eq=vendorName(eq: "Phidget"/>
    </VendorInfo>
  </Find>
</Query>)

Find Query Result:

Code Block
languagexmlruby
titleFind DataModel Query Result
linenumberstrue
<Find#
Find(Status=: "Success", Format=: "all">):
  <Result>Result:
    <VendorInfo QName=VendorInfo(QName: "SimpleModel.MyModels.VendorInfo">):
      <VendorSysId>KNRX3TBUAAAAUAABA4LIWHP2</VendorSysId>
VendorSysId: "KNRX3TBUAAAAUAABA4LIWHP2"
     <vendorTitle vendorTitle(Value=: "Sensor Company", Known=: "Sensor Company", Version=: "1", Timestamp=: "1457663102018", DateTime=: "2016-03-10 18:25:02.018", QName=: "SimpleModel.MyModels.VendorInfo.vendorTitle", FName=: "vendorTitle"/>)
      <vendorName Value=vendorName(Value: "Phidget", Known=: "Phidget", Version=: "1", Timestamp=: "1457663102004", DateTime=: "2016-03-10 18:25:02.004", QName=: "SimpleModel.MyModels.VendorInfo.vendorName", FName=: "vendorName"/>
    </VendorInfo>
  </Result>
</Find>)

Example of Find Filter on Attributes of type Datetime


Code Block
languagexmlruby
titleDatamodel definiton
linenumberstrue
<DataModel#
DataModel(Name=: "MyTasks">):
  <Sid Name=Sid(Name: "TaskID"/>)
  <String Name=String(Name: "TaskName"/>)
  <String Name=String(Name: "TaskDesc"/>)
  <DateTime Name=DateTime(Name: "TaskTime", Format=: "$SimpleDateFormat(yyyy-MM-dd'T'HH:mm:ss'Z')"/> <!--)
  # TaskTime is a DateTime of SimpleDateFormat -->
  <Integer Name=Integer(Name: "TaskStatus"/>)
  <Integer Name=Integer(Name: "RemindBeforeXMinutes"/>
</DataModel>)


Datetime with simple Greater Than filter

Code Block
languagexmlruby
titleDatetime filter
linenumberstrue
<Query>#
Query:
 <Find> Find:
   <MyTasks> MyTasks:
     <TaskID TaskID(ne=: ""/>)
      <TaskTime gt=TaskTime(gt: "[:$Now('%1$tY-%1$tm-%1$tdT%1$tTZ'):]"/> <!--)  # Get the time in SimpleDateFormat -->
    </MyTasks>
  </Find>
</Query>


Datetime with Range-based filters

Code Block
languagexmlruby
titleDatetime filter
linenumberstrue
<Query>#
Query:
         <Find format=Find(format: "Version">):
    MyTasks:
       <MyTasks>
              <TaskID ne=""/>TaskID(ne: "")
              <TaskTime ge=TaskTime(ge: "[:$Now('%1$tY-%1$tm-%1$tdT%1$tTZ', +PT15M):]"/>)
              <TaskTime lt=TaskTime(lt: "[:$Now('%1$tY-%1$tm-%1$tdT%1$tTZ', +PT6M):]"/>)
              <RemindBeforeXMinutes le=RemindBeforeXMinutes(le: "15"/>)
              <RemindBeforeXMinutes gt="0"/>
            </MyTasks>
          </Find>
</Query>RemindBeforeXMinutes(gt: "0")



Update Query:

Code Block
languagexmlruby
titleUpdate DataModel Query
linenumberstrue
<Query>#
Query:
 <Find Find(format=: "version">):
    <VendorInfo>VendorInfo:
      <vendorName eq=vendorName(eq: "Phidget"/>)
    </VendorInfo>SetResponseData:
  </Find>   <SetResponseData>
    <Key>MessageKey: Message.Value.Find.Result.VendorInfo.vendorName</Key>vendorName
    <Value>Phidget Inc</Value>
  </SetResponseData>
  <Update>Value: "Phidget Inc"
  Update:
    From: Result
<From>Result</From>    Include: <Include>$Response$findResponse.Message.Value.Find</Include>
  </Update>
</Query>Find

Update Query Result:

Note that the Version number is incremented automatically if the update is successful.
Code Block
languagexmlruby
titleUpdate DataModel Query
linenumberstrue
<Find#
Find(Status=: "Success", Format=: "version">):
  <Result>Result:
    <VendorInfo>VendorInfo:
      <VendorSysId>KNTMS6F7AAAAUAABA7SVACBP</VendorSysId>
VendorSysId: "KNTMS6F7AAAAUAABA7SVACBP"
     <vendorTitle vendorTitle(Value=: "Sensor Provider", Version=: "1"/>)
      <vendorName>Phidget Inc</vendorName>
    </VendorInfo>
  </Result>
</Find>
<Update Status="Success" Format="version">
  <VendorInfo>vendorName: "Phidget Inc"
Update(Status: "Success", Format: "version"):
  VendorInfo:
    <VendorSysId>KNTMS6F7AAAAUAABA7SVACBP</VendorSysId>
VendorSysId: "KNTMS6F7AAAAUAABA7SVACBP"
   <vendorName vendorName(Status=: "Success=Updated:2:1457718402256;", Value=: "Phidget Inc", Version=: "2"/>)
    <vendorTitle Status=vendorTitle(Status: "Success_NoAction:1:1457718393024;", Value=: "Sensor Provider", Version=: "1"/>
  </VendorInfo>
</Update>)


Delete Query:

Code Block
languagexmlruby
titleDelete DataModel Query
linenumberstrue
<Query>#
Query:
 <DeleteAll> DeleteAll:
   <VendorInfo> VendorInfo:
     <vendorName vendorName(eq=: "Phidget"/>
    </VendorInfo>
  </DeleteAll>
</Query>)


DataModel with one Complex type

Code Block
languagexmlruby
titleDataModel with one Complex Type
linenumberstrue
<Def#
Def(Name=: "PostalAddress">):
 <String String(Name=: "Street"/>)
 <String String(Name=: "City"/>)
 <String String(Name=: "Zipcode"/>
</Def>
<DataModel Name=)
DataModel(Name: "VendorInfo">):
  <SidSid name=: "VendorSysId"/>)
  <String name=String(Name: "vendorName"/>)
  <String name=String(Name: "vendorTitle"/>)
  <PostalAddressPostalAddress name=: "VendorAddress"/>
</DataModel>)

DataModel with one Attribute that is of Array defined via Cardinality.

...

For example: Let's say you have a DataModel VendorInfo as defined below.

Code Block
languagexmlruby
titleSample project
linenumberstrue
collapsetrue
<Namespace#
Namespace(Name=: "SimpleModel">):
  <Domain Name=Domain(Name: "MyModels">):
    <DataModel Name=DataModel(Name: "VendorInfo">):
      <SidSid name=: "VendorSysId"/>)
      <String name=String(Name: "vName"/>)
      <String name=String(Name: "vTitle"/>)
      <String name=String(Name: "vLocation"/>
    </DataModel>
  </Domain>
</Namespace>)

Generic Macro to Save File:

...

Note the content has to be part of ProcessData.

Code Block
languagexmlruby
titleGeneric SaveFile Macro
linenumberstrue
collapsetrue
<Macro#
Macro(Name=: "SaveFile">):
  <Argument>Argument:
    <FilePath/>
FilePath: ""
 </Argument> Result:
 <Result>   JexlScript:
 <JexlScript>       var file = "[:$Macro.Argument.FilePath:]";
      var data = sffContext.getProcessData(["toCSV","result"]);
      sffLog.info("Data", + data);
      sff:saveTxt("text", file, data);
      return null;
    </JexlScript>
  </Result>
</Macro>


Code Block
languagexmlruby
titleFindConvertAndSave
linenumberstrue
collapsetrue
<Query>#
Query:
 <Find> Find:
   <VendorInfo> VendorInfo:
     <vName vName(ne=: ""/>)
    </VendorInfo>
  </Find>
  <SetProcessData key=SetProcessData(key: "toCSV.result", value=: "Name,Title,Location[:EOL:]"/>)
   <For Each="val" In="foreach(value: $vendor, in: $findResponse.Message.Value.Find.Result.VendorInfo">):
    <SetProcessDataSetProcessData key=: "toCSV.result", Value=: "[:$ProcessData.toCSV.result:][:$LocalData$TL.valvendor.vName:],[:$LocalData$TL.valvendor.vTitle:],[:$LocalData$TL.valvendor.vLocation:][:EOL:]"/>)
  </For>SaveFile:
  <SaveFile>     <FilePath>
      FilePath: "./resources/querydata.csv
    </FilePath>
  </SaveFile>
</Query>"


Code Block
languagexmlruby
titleSave Query Output to a File
linenumberstrue
collapsetrue
<Query>#
Query:
 <Find> Find:
   <VendorInfo> VendorInfo:
     <vName vName(ne=: ""/>)
    </VendorInfo>
  </Find>
  <SetProcessData key=SetProcessData key: "toCSV.result", value=: "Name,Title,Location[:EOL:]"/>)
   <For Each="val" In="foreach(value: $vendor, in: $findResponse.Message.Value.Find.Result.VendorInfo">):
    <SetProcessDataSetProcessData key=: "toCSV.result", Value=: "[:$ProcessData.toCSV.result:][:$LocalData$TL.valvendor.vName:],[:$LocalData$TL.valvendor.vTitle:],[:$LocalData$TL.valvendor.vLocation:][:EOL:]"/>)
  </For>
  <SetLocalData key=SetLocalData key: "FILE", value=: "#o'resources/querydata.csv'#"/>)
  logInfo <Log>= [:[:$LocalData$TL.FILE:][:$ProcessData.toCSV.result:]:]</Log>
</Query>

Finally to View the file:

...