2016-08-30 13 views
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); 
 
}

答えて

1

スクリーンベースのAPIでの検索は、GUIDのサポートしていませんように見えます。 Type、Summary、CreatedAt:

Screen context = new Screen(); 
context.CookieContainer = new System.Net.CookieContainer(); 
context.Url = "http://localhost/ActivityAttachments/Soap/CR306000.asmx"; 
context.Login("admin", "123"); 

var content = context.GetSchema(); 

var newActivities = context.Export 
(
    new Command[] 
    { 
      new Value 
      { 
       Value = "000110", 
       LinkedCommand = content.CaseSummary.CaseID 
      }, 

      content.Activities.Type, 
      content.Activities.Summary, 
      content.Activities.CreatedAt, 
    }, 
    null, 0, false, false 
); 

byte[] filedata; 
using (FileStream file = File.Open("EP507011.txt", FileMode.Open)) 
{ 
    filedata = new byte[file.Length]; 
    file.Read(filedata, 0, filedata.Length); 
} 

Content[] content1 = context.Submit 
(
    new Command[] 
    { 
     new Value 
     { 
      Value = "000110", 
      LinkedCommand = content.CaseSummary.CaseID 
     }, 
     new Key 
     { 
      ObjectName = content.Activities.Type.ObjectName, 
      FieldName = content.Activities.Type.FieldName, 
      Value = string.Format("='{0}'", newActivities[newActivities.Length - 2][0]) 
     }, 
     new Key 
     { 
      ObjectName = content.Activities.Summary.ObjectName, 
      FieldName = content.Activities.Summary.FieldName, 
      Value = string.Format("='{0}'", newActivities[newActivities.Length - 2][1]) 
     }, 
     new Key 
     { 
      ObjectName = content.Activities.CreatedAt.ObjectName, 
      FieldName = content.Activities.CreatedAt.FieldName, 
      Value = newActivities[newActivities.Length - 2][2] 
     }, 
     new Value 
     { 
      FieldName = "EP507011.txt", 
      Value = Convert.ToBase64String(filedata), 
      LinkedCommand = content.Activities.ServiceCommands.Attachment 
     }, 
     content.Actions.Save 
    } 
); 
+0

まだ、動作しておらず、最初のアクティビティを更新しています。 – Krunal

+0

SP203010WSとCR306000の名前空間のクラスを混在させる理由を説明してください。どのようにこれが動作するはずです... – RuslanDev

+0

混乱して申し訳ありません。 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

関連する問題