Nano Hash - криптовалюты, майнинг, программирование

Обновление существующей активности с вложениями

Мне нужно обновить вложение к существующему действию с использованием веб-API из моего приложения в существующее дело на партнерском портале Acumatica.

Я уже написал для этого код, но он всегда обновляется до первого действия, а не для действия, которое я передаю noteid.

Я делаю это, получая noteid созданного действия, а затем отправляя тот же noteid вместе с caseid для обновления вложения.

Ниже приведен код, который обновляет существующую активность с вложением, пожалуйста, предложите.

var origActivities = context1.Export
	(
		new SP203010WS.Command[]
		{
				new SP203010WS.Value
				{
					Value = currentAcumaticaCaseNo,
					LinkedCommand = content.Case.CaseID
				},

				content.Activities.Type,
				content.Activities.Summary,
				new SP203010WS.Field
				{
					FieldName = "NoteID",
					ObjectName = content.Activities.Summary.ObjectName
				},
				content.Activities.CreatedAt,
		},
		null, 0, false, false
	);

Guid?[] origActivityNoteID = null;
DateTime?[] origActivityCreatedDate = null;
if (origActivities != null && origActivities.Count() > 0)
{
	origActivityNoteID = new Guid?[origActivities.Count()];
	origActivityCreatedDate = new DateTime?[origActivities.Count()];

	int i = 0;
	foreach (string[] activity in origActivities)
	{
		origActivityNoteID[i] = new Guid(activity[2].ToString());
		origActivityCreatedDate[i] = Convert.ToDateTime(activity[3]);
		i++;
	}
}

*****Adding new activity*****

var newActivities = context.Export
	(
		new SP203010WS.Command[]
		{
				new SP203010WS.Value
				{
					Value = currentAcumaticaCaseNo,
					LinkedCommand = content.Case.CaseID
				},

				content.Activities.Type,
				content.Activities.Summary,
				new SP203010WS.Field
				{
					FieldName = "NoteID",
					ObjectName = content.Activities.Summary.ObjectName
				},
				content.Activities.CreatedAt,
		},
		null, 0, false, false
	);

Guid? newActivityNoteID = null;

for (var i = 1; i <= newActivities.GetUpperBound(0); i++)
{
	if(origActivityNoteID != null && origActivityCreatedDate != null)
	{
		if((Array.IndexOf<Guid?>(origActivityNoteID, new Guid(newActivities[i][2])) <= 0) &&
				(Array.IndexOf<DateTime?>(origActivityCreatedDate, Convert.ToDateTime(newActivities[i][3])) <= 0))
		{
			newActivityNoteID = new Guid(newActivities[i][2]);
			break;
		}
	}
}

*****getting a list of all attachments*****

foreach (FileInfo fi in fileInfo)
{
	SP203010WS.Content[] content1 = context.Submit
	(
		new SP203010WS.Command[]
			{
				new SP203010WS.Value
				{
					//Value = actiPartner.AcumaticaCaseID,
					Value = currentAcumaticaCaseNo,
					LinkedCommand = CR306000.Case.CaseID
				},
				new SP203010WS.Value
				{
					Value = newActivityNoteID.ToString(),
					LinkedCommand = new SP203010WS.Field { FieldName="NoteID", ObjectName="Activities" }
				},
				new SP203010WS.Value
				{
					FieldName = fi.Name,
					Value = Convert.ToBase64String(fi.BinData),
					LinkedCommand = CR306000.Activities.ServiceCommands.Attachment
				},
				CR306000.Actions.Save
			}
	);
}

30.08.2016

Ответы:


1

Похоже, поиск в Screen-Based 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
    }
);
30.08.2016
  • Все еще не работает и обновляет первую активность. 30.08.2016
  • Не могли бы вы объяснить, почему вы смешиваете классы из пространств имен SP203010WS и CR306000? Не уверен, как это должно работать... 30.08.2016
  • Извините за путаницу. CR306000 — это не что иное, как имя объекта. Он уже работает, но переходит в неправильную активность. Вот код для справки SP203010WS.Screen context = new SP203010WS.Screen(); context.CookieContainer = новый System.Net.CookieContainer(); context.AllowAutoRedirect = истина; context.EnableDecompression = истина; контекст.Время ожидания = 1000000; context.Url = sso.acumatica.com/Soap/SP203010.asmx; Результат SP203010WS.LoginResult = context.Login(имя пользователя, пароль); SP203010WS.Content CR306000 = context.GetSchema(); 30.08.2016
  • Обновил мой ответ выше 30.08.2016
  • Я вижу, вы обновляете его с помощью CreatedAt вместо NoteID. Разве NoteId не является ключевым полем в таблице, почему оно не обновляет вложения с помощью NoteId, а вместо этого обновляет с помощью CreatedAt. 31.08.2016
  • Поиск в Screen-Based API не поддерживает GUID (поле NoteID имеет тип GUID). Вам нужно будет найти необходимую активность, используя другие поля, например: Тип, Сводка и CreatedAt. 31.08.2016
  • Хорошо Руслан. Спасибо. 31.08.2016
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..