X++: 将查询结果转换为通用的JSON对象

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/rocklee/article/details/81871877

 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格式返回。

猜你喜欢

转载自blog.csdn.net/rocklee/article/details/81871877