Requirement
SON CREATION & SERIALIZATION USING FORMJSONSERIALIZER & X++ in Microsoft Dynamics 365 for finance and operations.
Format Of Output JSON String & Message
D you want to fetch records of all the companies of Microsoft Dynamics 365 finance and operations using cross-company in your Odata service application? Here is the trick:
Add below line in your C# program which is using AddQueryOption
d365.SalesOrderHeadersV2.AddQueryOption(“cross-company”, “true”)
Requirement :
Uploading a file in Sharepoint online using X++ and inside from Microsoft Dynamics 365 finance and operations.
Prerequisites:
The current user id of Microsoft Dynamics 365 Finance and operations should have proper rights and privileged in Sharepoint Online.
Sample Code:
In this scenario i am creating a text file in Microsoft Dynamics 365 finance and operations and then uploading its memory Stream in Sharepoint online using X++ . You can modify the X++ code in D365 finance and operations as per your need.
class RunnableClassRun { /// /// Runs the class with the specified arguments. /// /// The specified arguments. public static void main(Args _args) { System.UriBuilder builder = new System.UriBuilder(“https://XXXXXX.sharepoint.com” ;); str extId = xUserInfo::getExternalId(); Microsoft.Dynamics.AX.Framework.FileManagement.SharePointDocumentStorageProvider provider; Microsoft.Dynamics.AX.Framework.FileManagement.DocumentLocation documentLocation = new Microsoft.Dynamics.AX.Framework.FileManagement.DocumentLocation(); provider = new Microsoft.Dynamics.AX.Framework.FileManagement.SharePointDocumentStorageProvider(“XXXXXX.sharepoint.com”, “sites/dummy”, “Shared%20Documents/MyFolder”, extId); System.Byte[] reportBytes = new System.Byte[0](); System.Text.ASCIIEncoding enc = new System.Text.ASCIIEncoding(); reportBytes = enc.GetBytes(“YOUR STRING/TEXT”); System.IO.MemoryStream memoryStream = new System.IO.MemoryStream(reportBytes); //memoryStream = comma.getStream(); documentLocation = provider.SaveFile(newGuid(), ‘TextFile.txt’, System.Web.MimeMapping::GetMimeMapping(‘TextFile.txt’), memoryStream); }
}
}
VIDEO
Requirement:
Developer is consuming an external REST web-service in D365/X++ . Response is in the JSON format. Developer needs to DeSerialize incoming JSON so that values can be used later in the system.
Sample Code:
Create a contract class
[DataContract]
class JSONContract
{
String50 parmFirst, parmSecond;
[
DataMemberAttribute('parmFirst')
]
public String50 parmFirst(String50 _parmFirst = parmFirst)
{
parmFirst = _parmFirst;
return parmFirst;
}
[
DataMemberAttribute('parmSecond')
]
public String50 parmSecond(String50 _parmSecond = parmSecond)
{
parmSecond = _parmSecond;
return parmSecond;
}
}
Sample Class
class RunnableClassABC
{
/// <summary>
/// Runs the class with the specified arguments.
/// </summary>
/// <param name = "_args">The specified arguments.</param>
public static void main(Args _args)
{
str json;
List values = new List(Types::String);
ListEnumerator value;
json = '[{"FieldValues": [{"parmFirst": "ValueFirst", "parmSecond": "ValueSecond", "parmList":[{"parmFirst": "ValueFirst", "parmSecond": "ValueSecond"}] }]}]';
// Deserializing Json
values = FormJsonSerializer::deserializeCollection(classnum(List), json, Types::Class, classStr(JSONContract));
value = values.getEnumerator();
while(value.moveNext())
{
JSONContract JSONContractCurrent = value.current();
info(strFmt("%1 %2",JSONContractCurrent.parmFirst(), JSONContractCurrent.parmSecond()));
}
}
}
Requirement
Developing a custom web service for reading data from 2 Header Line tables.The return message should be in JSON Format and input message should also be in JSON Format.
Sample Code
Create a contract class of header table [DataContractAttribute('KIOSKTagHeaderContract')]
class AcxKIOSKTagHeaderContract
{
AcxTagNo tagNo;
Description tagDescription;
InventSiteId currentSite;
InventLocationId currentWarehouse;
str tagStatus;
AcxGrossWeight grossWt;
AcxNetWeight netWt;
AcxNetWeight stoneWt;
PurchPrice purchPrice;
ItemId fgItemId;
AcxSectionId sectionId;
AcxBrandId brand;
AcxCertificateNo certificateNo;
str addWeight;
List tagLineList;
[DataMemberAttribute('tagNo')]
public AcxTagNo tagNo(AcxTagNo _tagNo = tagNo)
{
tagNo = _tagNo;
return tagNo;
}
[DataMemberAttribute('tagDescription')]
public Description tagDescription(Description _tagDescription = tagDescription)
{
tagDescription = _tagDescription;
return tagDescription;
}
[DataMemberAttribute('currentSite')]
public InventSiteId currentSite(InventSiteId _currentSite = currentSite)
{
currentSite = _currentSite;
return currentSite;
}
[DataMemberAttribute('currentWarehouse')]
public InventLocationId currentWarehouse(InventLocationId _currentWarehouse = currentWarehouse)
{
currentWarehouse = _currentWarehouse;
return currentWarehouse;
}
[DataMemberAttribute('tagStatus')]
public str tagStatus(str _tagStatus = tagStatus)
{
tagStatus = _tagStatus;
return tagStatus;
}
[DataMemberAttribute('grossWt')]
public AcxGrossWeight grossWt(AcxGrossWeight _grossWt = grossWt)
{
grossWt = _grossWt;
return grossWt;
}
[DataMemberAttribute('stoneWt')]
public AcxNetWeight stoneWt(AcxNetWeight _stoneWt = stoneWt)
{
stoneWt = _stoneWt;
return stoneWt;
}
[DataMemberAttribute('netWt')]
public AcxNetWeight netWt(AcxNetWeight _netWt = netWt)
{
netWt = _netWt;
return netWt;
}
[DataMemberAttribute('purchPrice')]
public PurchPrice purchPrice(PurchPrice _purchPrice = purchPrice)
{
purchPrice = _purchPrice;
return purchPrice;
}
[DataMemberAttribute('fgItemId')]
public ItemId fgItemId(ItemId _fgItemId = fgItemId)
{
fgItemId = _fgItemId;
return fgItemId;
}
[DataMemberAttribute('sectionId')]
public AcxSectionId sectionId(AcxSectionId _sectionId = sectionId)
{
sectionId = _sectionId;
return sectionId;
}
[DataMemberAttribute('brand')]
public AcxBrandId brand(AcxBrandId _brand = brand)
{
brand = _brand;
return brand;
}
[DataMemberAttribute('certificateNo')]
public AcxCertificateNo certificateNo(AcxCertificateNo _certificateNo = certificateNo)
{
certificateNo = _certificateNo;
return certificateNo;
}
[DataMemberAttribute('addWeight')]
public str addWeight(str _addWeight = addWeight)
{
addWeight = _addWeight;
return addWeight;
}
[DataMemberAttribute("tagLine"),
AifCollectionTypeAttribute("_tagLineList",Types::Class, classStr(AcxKIOSKTagLineContract)),
AifCollectionTypeAttribute("return",Types::Class, classStr(AcxKIOSKTagLineContract))]
public List parmtagLineList(List _tagLineList =tagLineList)
{
tagLineList = _tagLineList;
return tagLineList;
}
}
Create a contract class of line table [DataContractAttribute('KIOSKTagLineContract')]
class AcxKIOSKTagLineContract
{
AcxTagNo tagNo;
LineNum LineNum;
ItemId itemCode;
Qty qty;
AcxNetWeight netWt;
int noofStonePcs;
PurchPrice purchTransPrice;
PurchPrice purchTransValue;
AcxGrossWeight grossWt;
UnitOfMeasureSymbol uom;
AcxShortName stoneCut;
AcxShortName diamonColor;
AcxShortName stoneClarity;
AcxShortName stoneShape;
AcxShortName stoneSize;
AcxShortName stoneName;
str primaryItem;
[DataMemberAttribute('tagNo')]
public AcxTagNo tagNo(AcxTagNo _tagNo = tagNo)
{
tagNo = _tagNo;
return tagNo;
}
[DataMemberAttribute('LineNum')]
public LineNum LineNum(LineNum _LineNum = LineNum)
{
LineNum = _LineNum;
return LineNum;
}
[DataMemberAttribute('itemCode')]
public ItemId itemCode(ItemId _itemCode = itemCode)
{
itemCode = _itemCode;
return itemCode;
}
[DataMemberAttribute('qty')]
public Qty qty(Qty _qty = qty)
{
qty = _qty;
return qty;
}
[DataMemberAttribute('netWt')]
public AcxNetWeight netWt(AcxNetWeight _netWt = netWt)
{
netWt = _netWt;
return netWt;
}
[DataMemberAttribute('noofStonePcs')]
public int noofStonePcs(int _noofStonePcs = noofStonePcs)
{
noofStonePcs = _noofStonePcs;
return noofStonePcs;
}
[DataMemberAttribute('purchTransPrice')]
public PurchPrice purchTransPrice(PurchPrice _purchTransPrice = purchTransPrice)
{
purchTransPrice = _purchTransPrice;
return purchTransPrice;
}
[DataMemberAttribute('purchTransValue')]
public PurchPrice purchTransValue(PurchPrice _purchTransValue = purchTransValue)
{
purchTransValue = _purchTransValue;
return purchTransValue;
}
[DataMemberAttribute('uom')]
public UnitOfMeasureSymbol uom(UnitOfMeasureSymbol _uom = uom)
{
uom = _uom;
return uom;
}
[DataMemberAttribute('stoneCut')]
public AcxShortName stoneCut(AcxShortName _stoneCut = stoneCut)
{
stoneCut = _stoneCut;
return stoneCut;
}
[DataMemberAttribute('diamonColor')]
public AcxShortName diamonColor(AcxShortName _diamonColor = diamonColor)
{
diamonColor = _diamonColor;
return diamonColor;
}
[DataMemberAttribute('stoneClarity')]
public AcxShortName stoneClarity(AcxShortName _stoneClarity = stoneClarity)
{
stoneClarity = _stoneClarity;
return stoneClarity;
}
[DataMemberAttribute('stoneShape')]
public AcxShortName stoneShape(AcxShortName _stoneShape = stoneShape)
{
stoneShape = _stoneShape;
return stoneShape;
}
[DataMemberAttribute('stoneSize')]
public AcxShortName stoneSize(AcxShortName _stoneSize = stoneSize)
{
stoneSize = _stoneSize;
return stoneSize;
}
[DataMemberAttribute('stoneName')]
public AcxShortName stoneName(AcxShortName _stoneName = stoneName)
{
stoneName = _stoneName;
return stoneName;
}
[DataMemberAttribute('primaryItem')]
public str primaryItem(str _primaryItem = primaryItem)
{
primaryItem = _primaryItem;
return primaryItem;
}
[DataMemberAttribute('grossWt')]
public AcxGrossWeight grossWt(AcxGrossWeight _grossWt = grossWt)
{
grossWt = _grossWt;
return grossWt;
}
}
Create a service operation classclass AcxKIOSKService
{
[AifCollectionTypeAttribute('return', Types::Class, classStr(AcxKIOSKTagHeaderContract)),
AifCollectionTypeAttribute('_keys', Types::Class, classStr(AcxKIOSKParmInfoContract))
]
public List getTagInfo(List _keys)
{
ListEnumerator keysEnumerator;
AcxKIOSKTagHeaderContract acxKIOSKTagHeaderContract;
AcxKIOSKTagLineContract aCXKIOSKTagLineContract;
AcxKIOSKParmInfoContract acxKIOSKParmInfoContract;
List returnList = new List(Types::Class);
List returnLineList = new List(Types::Class);
AcxTagHeader acxTagHeader;
AcxTagLines tagLines;
str fromDateTime, toDateTime;
;
keysEnumerator = _keys.getEnumerator();
keysEnumerator.moveNext();
acxKIOSKParmInfoContract = new AcxKIOSKParmInfoContract();
acxKIOSKParmInfoContract = keysEnumerator.current();
fromDateTime = acxKIOSKParmInfoContract.fromDateTime();
if (!fromDateTime)
{
fromDateTime ="1985/02/25 23:04:59";
}
toDateTime = acxKIOSKParmInfoContract.toDateTime();
if (!toDateTime)
{
toDateTime ="2050/02/25 23:04:59";
}
while select * from acxTagHeader
where acxTagHeader.ModifiedDateTime >= str2Datetime(fromDateTime, 321)
&& acxTagHeader.ModifiedDateTime <= str2Datetime(toDateTime, 321)
{
acxKIOSKTagHeaderContract = new acxKIOSKTagHeaderContract();
acxKIOSKTagHeaderContract.tagNo(acxTagHeader.TagNo);
acxKIOSKTagHeaderContract.tagDescription(acxTagHeader.Description);
acxKIOSKTagHeaderContract.fgItemId(acxTagHeader.ItemId);
acxKIOSKTagHeaderContract.currentWarehouse(acxTagHeader.InventLocationId);
acxKIOSKTagHeaderContract.currentSite(acxTagHeader.InventSiteId);
acxKIOSKTagHeaderContract.grossWt(acxTagHeader.GrossWeight);
acxKIOSKTagHeaderContract.netWt(acxTagHeader.NetWeight);
acxKIOSKTagHeaderContract.stoneWt(acxTagHeader.StoneWeight);
acxKIOSKTagHeaderContract.tagStatus(enum2Str(acxTagHeader.TagStatus));
acxKIOSKTagHeaderContract.purchPrice(acxTagHeader.PurchaseCost);
acxKIOSKTagHeaderContract.sectionId(acxTagHeader.SectionId);
acxKIOSKTagHeaderContract.brand(acxTagHeader.Brand);
acxKIOSKTagHeaderContract.certificateNo(acxTagHeader.CertificateNo);
acxKIOSKTagHeaderContract.addWeight(enum2Str(acxTagHeader.AddWeight));
returnLineList = new List(Types::Class);
this.kioskTagLines(acxTagHeader.TagNo);
/*******
while select * from tagLines
where tagLines.TagNo == acxTagHeader.TagNo
{
aCXKIOSKTagLineContract = new AcxKIOSKTagLineContract();
aCXKIOSKTagLineContract.tagNo(tagLines.TagNo);
aCXKIOSKTagLineContract.LineNum(tagLines.LineNum);
aCXKIOSKTagLineContract.itemCode(tagLines.ItemId);
aCXKIOSKTagLineContract.netWt(tagLines.NetWeight);
aCXKIOSKTagLineContract.grossWt(tagLines.GrossWeight);
aCXKIOSKTagLineContract.qty(tagLines.Quantity);
aCXKIOSKTagLineContract.noofStonePcs(tagLines.NoofStonePcs);
aCXKIOSKTagLineContract.purchTransPrice(tagLines.PurchTransPrice);
aCXKIOSKTagLineContract.purchTransValue(tagLines.PurchTransValue);
aCXKIOSKTagLineContract.uom(tagLines.UOM);
aCXKIOSKTagLineContract.stoneCut(tagLines.StoneCut);
aCXKIOSKTagLineContract.diamonColor(tagLines.DiamondColor);
aCXKIOSKTagLineContract.stoneClarity(tagLines.StoneClarity);
aCXKIOSKTagLineContract.stoneName(tagLines.StoneName);
aCXKIOSKTagLineContract.stoneShape(tagLines.StoneShape);
aCXKIOSKTagLineContract.stoneSize(tagLines.StoneSize);
aCXKIOSKTagLineContract.primaryItem(enum2Str(tagLines.PrimaryItem));
returnLineList.addEnd(aCXKIOSKTagLineContract);
}
acxKIOSKTagHeaderContract.parmtagLineList(returnLineList);
*******/
returnList.addEnd(acxKIOSKTagHeaderContract);
}
return returnList;
}
public void kioskTagLines(AcxTagNo tagNo)
{
AcxKIOSKTagLineContract aCXKIOSKTagLineContract;
AcxKIOSKParmInfoContract acxKIOSKParmInfoContract;
List returnLineList = new List(Types::Class);
AcxTagLines tagLines ;
returnLineList = new List(Types::Class);
while select * from tagLines
where tagLines.TagNo == tagNo
{
aCXKIOSKTagLineContract = new AcxKIOSKTagLineContract();
aCXKIOSKTagLineContract.tagNo(tagLines.TagNo);
aCXKIOSKTagLineContract.LineNum(tagLines.LineNum);
aCXKIOSKTagLineContract.itemCode(tagLines.ItemId);
aCXKIOSKTagLineContract.netWt(tagLines.NetWeight);
aCXKIOSKTagLineContract.grossWt(tagLines.GrossWeight);
aCXKIOSKTagLineContract.qty(tagLines.Quantity);
aCXKIOSKTagLineContract.noofStonePcs(tagLines.NoofStonePcs);
aCXKIOSKTagLineContract.purchTransPrice(tagLines.PurchTransPrice);
aCXKIOSKTagLineContract.purchTransValue(tagLines.PurchTransValue);
aCXKIOSKTagLineContract.uom(tagLines.UOM);
aCXKIOSKTagLineContract.stoneCut(tagLines.StoneCut);
aCXKIOSKTagLineContract.diamonColor(tagLines.DiamondColor);
aCXKIOSKTagLineContract.stoneClarity(tagLines.StoneClarity);
aCXKIOSKTagLineContract.stoneName(tagLines.StoneName);
aCXKIOSKTagLineContract.stoneShape(tagLines.StoneShape);
aCXKIOSKTagLineContract.stoneSize(tagLines.StoneSize);
aCXKIOSKTagLineContract.primaryItem(enum2Str(tagLines.PrimaryItem));
returnLineList.addEnd(aCXKIOSKTagLineContract);
}
/////acxKIOSKTagHeaderContract.parmtagLineList(returnLineList);
}
[
AifCollectionTypeAttribute('return', Types::Class, classStr(AcxKIOSKDesignReplyContract)),
AifCollectionTypeAttribute('_keys', Types::Class, classStr(AcxKIOSKDesignContract))
]
public List setDesignInfo(List _keys)
{
ListEnumerator keysEnumerator;
AcxKIOSKDesignReplyContract acxKIOSKDesignReplyContract;
AcxKIOSKDesignContract acxKIOSKDesignContract;
List returnList = new List(Types::Class);
AcxDesignHeader acxDesignHeader;
AcxDesignLine acxdesignLine;
;
keysEnumerator = _keys.getEnumerator();
while (keysEnumerator.moveNext())
{
infolog.clear();
try
{
ttsbegin;
acxKIOSKDesignContract = keysEnumerator.current();
acxDesignHeader.clear();
acxDesignHeader.initValue();
acxDesignHeader.DesignCode = acxKIOSKDesignContract.designCode();
acxDesignHeader.DesignName = acxKIOSKDesignContract.designName();
acxDesignHeader.VendAccount = acxKIOSKDesignContract.vendAccount();
acxDesignHeader.VendDesignNo = acxKIOSKDesignContract.vendDesign();
acxDesignHeader.insert();
acxdesignLine.clear();
acxdesignLine.initValue();
acxdesignLine.DesignCode = acxDesignHeader.DesignCode;
acxdesignLine.DesignName = acxDesignHeader.DesignName;
acxdesignLine.ItemId = acxKIOSKDesignContract.itemId();
acxdesignLine.ItemTypeCode = acxKIOSKDesignContract.itemTypeCode();
acxdesignLine.OrnamentCategoryCode = acxKIOSKDesignContract.ornamentCategoryCode();
acxdesignLine.GrossWeightRangeCode = acxKIOSKDesignContract.weightRangeCode();
acxdesignLine.DiamondWeightRangeCode = acxKIOSKDesignContract.diamonWeightRangeCode();
acxdesignLine.SectionId = acxKIOSKDesignContract.sectionId();
acxdesignLine.BrandId = acxKIOSKDesignContract.brandId();
acxdesignLine.SectionName = AcxSection::find(acxdesignLine.SectionId, acxdesignLine.OrnamentCategoryCode).SectionName;
acxdesignLine.BrandName = AcxBrand::find(acxdesignLine.BrandId, acxdesignLine.SectionId, acxdesignLine.OrnamentCategoryCode).BrandName;
acxdesignLine.insert();
ttscommit;
acxKIOSKDesignReplyContract = new AcxKIOSKDesignReplyContract();
acxKIOSKDesignReplyContract.designCode(acxKIOSKDesignContract.designCode());
acxKIOSKDesignReplyContract.designName(acxKIOSKDesignContract.designName());
acxKIOSKDesignReplyContract.status("200");
acxKIOSKDesignReplyContract.message("Success");
returnList.addEnd(acxKIOSKDesignReplyContract);
}
catch
{
ttsabort;
acxKIOSKDesignReplyContract = new AcxKIOSKDesignReplyContract();
acxKIOSKDesignReplyContract.designCode(acxKIOSKDesignContract.designCode());
acxKIOSKDesignReplyContract.designName(acxKIOSKDesignContract.designName());
acxKIOSKDesignReplyContract.status("400");
acxKIOSKDesignReplyContract.message(strFmt("Failed{%1}", infolog.text()));
returnList.addEnd(acxKIOSKDesignReplyContract);
}
}
return returnList;
}
[
AifCollectionTypeAttribute('return', Types::Class, classStr(AcxJobCardReplyContract)),
AifCollectionTypeAttribute('_keys', Types::Class, classStr(AcxJobCardContract))
]
public List setJobCardInfo(List _keys)
{
ListEnumerator keysEnumerator;
AcxJobCardReplyContract acxJobCardReplyContract;
AcxJobCardContract acxJobCardContract;
List returnList = new List(Types::Class);
AcxKIOSKJobCardTable acxKIOSKJobCardTable;
;
keysEnumerator = _keys.getEnumerator();
while (keysEnumerator.moveNext())
{
infolog.clear();
try
{
acxJobCardContract = keysEnumerator.current();
changecompany(acxJobCardContract.dataAreaId())
{
ttsbegin;
acxKIOSKJobCardTable.clear();
acxKIOSKJobCardTable.initValue();
acxKIOSKJobCardTable.BrandId = acxJobCardContract.brandId();
acxKIOSKJobCardTable.DesignCode = acxJobCardContract.designCode();
acxKIOSKJobCardTable.DiamondWtRangeCode = acxJobCardContract.brandId();
acxKIOSKJobCardTable.FGItemId = acxJobCardContract.fgItemId();
acxKIOSKJobCardTable.GrossWtRangeCode = acxJobCardContract.grossWeightRangeCode();
acxKIOSKJobCardTable.NetWtRangeCode = acxJobCardContract.netWeightRangeCode();
acxKIOSKJobCardTable.OrnamentPcs = acxJobCardContract.ornPCS();
acxKIOSKJobCardTable.ReferenceId = acxJobCardContract.referenceID();
acxKIOSKJobCardTable.SectionId = acxJobCardContract.sectionId();
acxKIOSKJobCardTable.insert();
ttscommit;
}
acxJobCardReplyContract = new acxJobCardReplyContract();
acxJobCardReplyContract.designCode(acxJobCardContract.designCode());
acxJobCardReplyContract.referenceID(acxJobCardContract.referenceID());
acxJobCardReplyContract.fgItemId(acxJobCardContract.fgItemId());
acxJobCardReplyContract.status("200");
acxJobCardReplyContract.message("Success");
returnList.addEnd(acxJobCardReplyContract);
}
catch
{
ttsabort;
acxJobCardReplyContract = new acxJobCardReplyContract();
acxJobCardReplyContract.designCode(acxJobCardContract.designCode());
acxJobCardReplyContract.referenceID(acxJobCardContract.referenceID());
acxJobCardReplyContract.fgItemId(acxJobCardContract.fgItemId());
acxJobCardReplyContract.status("400");
acxJobCardReplyContract.message(strFmt("Failed{%1}", infolog.text()));
returnList.addEnd(acxJobCardReplyContract);
}
}
return returnList;
}
}
Create a new services and add service operation class inside it which you created in Step 3.
Create a new services group using services which you created in step 4.The property of services group should be AutoDeploy = Yes.
Now Your API is ready to use.You case consume API in C# by downloading below samples . https://github.com/microsoft/Dynamics-AX-Integration/tree/master/ServiceSamples/ODataConsoleApplication
Your C# or DotNet should look like below one :
static void Main(string[] args)
{
string GetUserSessionOperationPath = string.Format("{0}{1}", ClientConfiguration.Default.UriString.TrimEnd('/'), sessionUrl);
var request = HttpWebRequest.Create(GetUserSessionOperationPath);
// If you call GetAuthenticationHeader with true you will the auth via AAD Web App, otherwise via Native AAD App
request.Headers[OAuthHelper.OAuthHeader] = OAuthHelper.GetAuthenticationHeader(true);
request.ContentType = "application/json; charset=utf-8";
request.Method = "POST";
//request.ContentLength = Encoding.UTF8.GetByteCount("[{\"ordernumber\": \"en-US\",\"customerCode\": \"ABC\"}]");
using (var streamWriter = new StreamWriter(request.GetRequestStream()))
{
// string json = "{\"_keys\":[{\"fromDateTime\":\"\",\"toDateTime\":\"\"}]}";
// string json = "{\"_keys\":[{\"designCode\":\"10DES-0054-TA\",\"designName\":\"10DES-0054-T\",\"itemId\":\"14_G_22K\",\"group\":\"G\",\"subGroup\":\"14\",\"sectionId\":\"CELEBRATED\",\"brandId\":\"OTHER\",\"grossweight\":0,\"weightRangeCode\":\"WR1\",\"diamonWeightRangeCode\":\"CT1\",\"vendAccount\":\"TST-000001\",\"vendDesign\":\"10DES-0054-T\",\"dataAreaId\":\"tst\"}]}";
string json = "{\"_keys\":[{\"designCode\":\"10DES-0054-T\",\"referenceID\":\"KIOSKRef001\",\"fgItemId\":\"14_G_22K\",\"sectionId\":\"CELEBRATED\",\"brandId\":\"OTHER\",\"grossWeightRange\":\"WR1\",\"diamonWeightRange\":\"CT1\",\"netWeightRange\":\"TST-000001\",\"ornPCS\":10,\"dataAreaId\":\"tst\"}]}";
Debug.Write(json);
streamWriter.Write(json);
streamWriter.Flush();
streamWriter.Close();
}
using (var response = (HttpWebResponse)request.GetResponse())
{
using (Stream responseStream = response.GetResponseStream())
{
using (StreamReader streamReader = new StreamReader(responseStream))
{
string responseString = streamReader.ReadToEnd();
Console.WriteLine(responseString);
}
}
}
Console.ReadLine();
}
}
Microsoft Dynamics AX, Microsoft Dynamics 365 for Finance and Operations, D365 FO, Retail, SQL, Microsoft Power Apps, Microsoft Power BI, Microsoft Azure, Logic Apps, Microsoft Flow, Microsoft power automate, Microsoft Power Platform,.Net, X++, C#, Power BI DAX, Data Warehousing, Microsoft Analysis Services, SQL Server Reporting Services