X++: 將查詢結果轉換為通用的JSON物件
阿新 • • 發佈:2018-11-17
public static FreeStyle.D365Tools.GMap getCursorValues(Common _table,Map pvSchema) { FreeStyle.D365Tools.GMap lvMap=FreeStyle.D365Tools.ObjectBuilder::CreateMap(); MapEnumerator en=new MapEnumerator(pvSchema); while (en.moveNext()) { lvMap.Add(en.currentKey(),_table.(en.currentValue())); } return lvMap; } ... /// <summary> /// Runs the class with the specified arguments. /// </summary> /// <param name = "_args">The specified arguments.</param> public static void main(Args _args) { //TestIntegration::testJson(); AEL_rnote_appr_template _master; Map lvFieldItems=null; int lvCC=0; FreeStyle.D365Tools.JSONResponse lvJsonObject=FreeStyle.D365Tools.ObjectBuilder::CreateJSONResponse(); FreeStyle.D365Tools.GMapList lvGList=FreeStyle.D365Tools.ObjectBuilder::CreateMapList(); lvJsonObject.result=lvGList; while select _master order by _master.fc_note_type { if (!lvFieldItems) { //lvFieldItems=TestIntegration::getTableSchema(_master); lvFieldItems=new Map(Types::String,Types::AnyType); lvFieldItems.insert("fc_note_type",fieldName2Id(_master.TableId,"fc_note_type")); lvFieldItems.insert("fc_last_step",fieldName2Id(_master.TableId,"fc_last_step")); } lvCC++; FreeStyle.D365Tools.GMap lvFieldValues=TestIntegration::getCursorValues(_master,lvFieldItems); lvGList.Add(lvFieldValues); } info(FreeStyle.D365Tools.JsonConverter::serialize(lvJsonObject)); }
而通用的JSONResponse的類:
public class JSONResponse
{
public int errCode = 0;
public string errMsg = "";
public Object result = null;
}
執行上面例子,返回json string:
{"errCode":0,"errMsg":"","result":[{"fc_last_step":4,"fc_note_type":"AS"},{"fc_last_step":5,"fc_note_type":"IR"},{"fc_last_step":2,"fc_note_type":"LR"},{"fc_last_step":0,"fc_note_type":"PS"}]}
Dynamics 365的webservice應用與第三方client的通訊,常常會用到json格式來傳輸資料, 但X++對json幾乎不提供支援, 通過FreeStyle.D365Tools工具集可滿足要求 。上述示例將AEL_rnote_appr_template所有記錄用JSONResponse封裝並以json格式返回。