0
私のアプリケーションからAcumatica Partner's Portalの既存のケースへのWeb APIを使用して、既存のアクティビティへの添付ファイルを更新する必要があります。添付ファイルによる既存のアクティビティの更新
私はすでにこのコードを書いていますが、noteidを渡しているアクティビティではなく、常に最初のアクティビティに更新しています。
作成したアクティビティのノートIDを取得し、同じノートIDをcaseidとともに送信して添付ファイルを更新することで、これを実行します。
以下は既存のアクティビティを添付ファイルで更新するコードです。お勧めします。
var origActivities = context1.Export
\t (
\t \t new SP203010WS.Command[]
\t \t {
\t \t \t \t new SP203010WS.Value
\t \t \t \t {
\t \t \t \t \t Value = currentAcumaticaCaseNo,
\t \t \t \t \t LinkedCommand = content.Case.CaseID
\t \t \t \t },
\t \t \t \t content.Activities.Type,
\t \t \t \t content.Activities.Summary,
\t \t \t \t new SP203010WS.Field
\t \t \t \t {
\t \t \t \t \t FieldName = "NoteID",
\t \t \t \t \t ObjectName = content.Activities.Summary.ObjectName
\t \t \t \t },
\t \t \t \t content.Activities.CreatedAt,
\t \t },
\t \t null, 0, false, false
\t);
Guid?[] origActivityNoteID = null;
DateTime?[] origActivityCreatedDate = null;
if (origActivities != null && origActivities.Count() > 0)
{
\t origActivityNoteID = new Guid?[origActivities.Count()];
\t origActivityCreatedDate = new DateTime?[origActivities.Count()];
\t int i = 0;
\t foreach (string[] activity in origActivities)
\t {
\t \t origActivityNoteID[i] = new Guid(activity[2].ToString());
\t \t origActivityCreatedDate[i] = Convert.ToDateTime(activity[3]);
\t \t i++;
\t }
}
*****Adding new activity*****
var newActivities = context.Export
\t (
\t \t new SP203010WS.Command[]
\t \t {
\t \t \t \t new SP203010WS.Value
\t \t \t \t {
\t \t \t \t \t Value = currentAcumaticaCaseNo,
\t \t \t \t \t LinkedCommand = content.Case.CaseID
\t \t \t \t },
\t \t \t \t content.Activities.Type,
\t \t \t \t content.Activities.Summary,
\t \t \t \t new SP203010WS.Field
\t \t \t \t {
\t \t \t \t \t FieldName = "NoteID",
\t \t \t \t \t ObjectName = content.Activities.Summary.ObjectName
\t \t \t \t },
\t \t \t \t content.Activities.CreatedAt,
\t \t },
\t \t null, 0, false, false
\t);
Guid? newActivityNoteID = null;
for (var i = 1; i <= newActivities.GetUpperBound(0); i++)
{
\t if(origActivityNoteID != null && origActivityCreatedDate != null)
\t {
\t \t if((Array.IndexOf<Guid?>(origActivityNoteID, new Guid(newActivities[i][2])) <= 0) &&
\t \t \t \t (Array.IndexOf<DateTime?>(origActivityCreatedDate, Convert.ToDateTime(newActivities[i][3])) <= 0))
\t \t {
\t \t \t newActivityNoteID = new Guid(newActivities[i][2]);
\t \t \t break;
\t \t }
\t }
}
*****getting a list of all attachments*****
foreach (FileInfo fi in fileInfo)
{
\t SP203010WS.Content[] content1 = context.Submit
\t (
\t \t new SP203010WS.Command[]
\t \t \t {
\t \t \t \t new SP203010WS.Value
\t \t \t \t {
\t \t \t \t \t //Value = actiPartner.AcumaticaCaseID,
\t \t \t \t \t Value = currentAcumaticaCaseNo,
\t \t \t \t \t LinkedCommand = CR306000.Case.CaseID
\t \t \t \t },
\t \t \t \t new SP203010WS.Value
\t \t \t \t {
\t \t \t \t \t Value = newActivityNoteID.ToString(),
\t \t \t \t \t LinkedCommand = new SP203010WS.Field { FieldName="NoteID", ObjectName="Activities" }
\t \t \t \t },
\t \t \t \t new SP203010WS.Value
\t \t \t \t {
\t \t \t \t \t FieldName = fi.Name,
\t \t \t \t \t Value = Convert.ToBase64String(fi.BinData),
\t \t \t \t \t LinkedCommand = CR306000.Activities.ServiceCommands.Attachment
\t \t \t \t },
\t \t \t \t CR306000.Actions.Save
\t \t \t }
\t);
}
まだ、動作しておらず、最初のアクティビティを更新しています。 – Krunal
SP203010WSとCR306000の名前空間のクラスを混在させる理由を説明してください。どのようにこれが動作するはずです... – RuslanDev
混乱して申し訳ありません。 CR306000はオブジェクト名だけです。それはすでに働いていますが、間違った活動に行きます。ここにあなたの参照のためのコードです SP203010WS.Screen context = new SP203010WS.Screen(); context.CookieContainer = new System.Net.CookieContainer(); context.AllowAutoRedirect = true; context.EnableDecompression = true; context.Timeout = 1000000; context.Url = "https://sso.acumatica.com/Soap/SP203010.asmx"; SP203010WS.LoginResult result = context.Login(username、password); SP203010WS.Content CR306000 = context.GetSchema(); – Krunal