КАК ПЕРЕДАТЬ ФОТО ЧЕРЕЗ DATASERVICE?

Нравится

2 комментария

Конкретного примера нет, но для добавления файла можно воспользоваться FileAPIService (тут описывался частичный случай, как правильно формировать запрос на отправку файла в систему).

 

Вот тут я вижу, что Вы написали, что не работает UserConnection. А Вы его инициалзировали отдельно (что-то типа

var userConnection = (UserConnection)HttpContext.Current.Session["UserConnection"];

)?

Показать все комментарии

Добрый день.

Для портальных пользователей, при выполнении запроса 

../0/DataService/ssp/json/SyncReply/QuerySysSettings

возвращается код 403, при этом, например, запросы 

../0/DataService/ssp/json/SyncReply/SelectQuery

../0/DataService/ssp/json/SyncReply/BatchQuery

проходят без проблем для этих же пользователей.

Где нужно включить разрешение для выполнения запроса к QuerySysSettings?

Нравится

1 комментарий

Я так понял, нужно смотреть какой параметр запрашивается в теле запроса, искать его в системных настройках и уже в системной настройке давать доступ портальным пользователям.

Показать все комментарии

Здравствуйте!

При удалении одной записи методом DataService с указанием фильтра по  колонке "id" время обработки запроса составляет 20-40 секунд, и это при общем количестве записей таблицы менее 1000. 

 При указании фильтра по любому строковому полю этого-же объекта(не индексируемому полю) , запрос отрабатывает существенно быстрее. 

Очень странное поведение, как для поиска по ключевому полю. Возможно есть нюансы? 

Версия облачная, postgre, доступ к инструментам мониторинга отсутствует.

 

Пример запроса:

{"items": [

        {"__type": "Terrasoft.Nui.ServiceModel.DataContract.DeleteQuery","QueryId":1,"QueryType":1,

                        "Filters":{"FilterType":1,"ComparisonType":3,"LeftExpression":{"ExpressionType":0,"ColumnPath":"Id"},"RightExpression":

                        {"ExpressionType":2,"Parameter":{"DataValueType":0,"Value":"81a45c46-f8df-4913-83ac-1457399f3873"}}},"RootSchemaName":"Account","OperationType":0,"IncludeProcessExecutionData":false}

        ]}

Пробовал в разных интерпретациях параметров фильтра, результат не меняется.

 

 

 

Нравится

2 комментария

Добрый день, Сергей!

Не совсем понятна суть вопроса, что вам необходимо сделать?

Если вы пользуетесь DataService, то рекомендую ознакомиться с примером удаление записи с его помощью.

https://academy.terrasoft.ua/docs/developer/integrations_and_api/data_s…

Показать все комментарии

День добрый.

Не смог отыскать примера структуры JSON'а для DataService.

В запросе отправляю следующий Json, без блока Filters отрабатывает корректно.

{
	"RootSchemaName": "Opportunity",
	"OperationType": "Select",
	"Columns": {
		"Items": {
			"Title": {
				"Expression":{
					"ExpressionType": "SchemaColumn",
					"ColumnPath": "Title"
				}
			}
		}
	},
	"AllColumns": false,
	"IsPageable": false,
	"Filters": {
		"RootSchemaName": "Opportunity",
		"FilterType": "CompareFilter",
		"LogicalOperation": "And",
		"LeftExpression": {
			"ExpressionType": "SchemaColumn",
			"ColumnPath": "Title"
		},
		"ComparisonType": "Contain",
		"RightExpression": {
			"ExpressionType": "Parameter",
			"Parameter": "test"
		},
		"LeftExpressionCaption": "test",
		"IsAggregative": false,
		"Key": "Title filter"
	}
}

Но при попытке использовать Filters сервис дает следующий ответ.

{
    "success": false,
    "responseStatus": {
        "ErrorCode": "NullReferenceException",
        "Message": "Ссылка на объект не указывает на экземпляр объекта.",
        "Errors": []
    },
    "rowsAffected": -1,
    "nextPrcElReady": false
}

Перепробовал различные варианты, но так и не смог отыскать где ошибка в структуре. Кто сталкивался и может привести пример структуры рабочего запроса? Спасибо!

Нравится

2 комментария
Лучший ответ

Добрый день.

Попробуйте для параметра значение указать таким образом:

"Parameter":{
    "DataValueType":[Тип данных],
     "Value":"[Значение колонки]"
}

 

Добрый день.

Попробуйте для параметра значение указать таким образом:

"Parameter":{
    "DataValueType":[Тип данных],
     "Value":"[Значение колонки]"
}

 

Алла Савельева,

получилось, спасибо.

Показать все комментарии

Здравствуйте!

Пытаюсь применить пагинацию к DataService, используя свойства isPageable, conditionalValues и rowCount.

{
	"rootSchemaName": "Account",
	"operationType": 0,
	"columns": {
		"items": {
			"Id": {
				"expression": {
					"expressionType": 0,
					"columnPath": "Id"
				}
			},
			"Name": {
				"expression": {
					"expressionType": 0,
					"columnPath": "Name"
				}
			}
		}
	},
	"isPageable": true,
	"conditionalValues": {
		"items": {
			"Id": {
				"orderDirection": 1,
				"orderPosition": 1,
				"columnPath": "Id",
				"expressionType": 0,
				"parameter": {
					"dataValueType": 0,
					"value": "10d84875-268a-468f-ad2c-2e4b047458d8"
				}
			}
		}
	},
	"rowCount": 1
}

Вот первый запрос и ответ

Изображение удалено.

Дальше использую значение последнего элемента, чтоб получить следующую порцию данных, но в результате приходит тот же элемент.

Изображение удалено.

В чем проблема? Нужна еще какая-то конфигурация запроса?

Нравится

1 комментарий

Если открыть раздел, начать листать вниз, дождаться появления очередной порции строк, в Fiddler увидим обращение к DataService с такими параметрами:

...
   "rowCount":15,
   "rowsOffset":15,
   "isPageable":true,
...

А дальше, соответственно, rowsOffset меняется на 30, 45, 60 и так далее. Для выбора с самого начала он был равен 0.

Показать все комментарии

Доброго дня, коллеги!

Стоит следующая задача - необходимо считать и отправить данные из объекта на удаленный веб-сервис. Удаленный веб-сервис принимает данные в формате XML. Подскажите пожалуйста, каким образом лучше всего это реализовать - используя бизнес-процессы, DataService или каким-либо другим способом? Заранее благодарю за развернутые ответы. 

Нравится

1 комментарий
Лучший ответ

Добрый день!

Бизнес процесс, в котором скрипт С# с использованием HttpWebRequest.

Пример:

var request = (HttpWebRequest)WebRequest.Create(serviceAddress);
request.Method = "POST";
byte[] byteArray = Encoding.UTF8.GetBytes(postData);
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = byteArray.Length;
request.Timeout = timeout * 1000;
using (var dataStream = request.GetRequestStream())
{
    dataStream.Write(byteArray, 0, byteArray.Length);
    dataStream.Close();
}
var resp = (HttpWebResponse)request.GetResponse();

Где postData - строка XML

Добрый день!

Бизнес процесс, в котором скрипт С# с использованием HttpWebRequest.

Пример:

var request = (HttpWebRequest)WebRequest.Create(serviceAddress);
request.Method = "POST";
byte[] byteArray = Encoding.UTF8.GetBytes(postData);
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = byteArray.Length;
request.Timeout = timeout * 1000;
using (var dataStream = request.GetRequestStream())
{
    dataStream.Write(byteArray, 0, byteArray.Length);
    dataStream.Close();
}
var resp = (HttpWebResponse)request.GetResponse();

Где postData - строка XML

Показать все комментарии

Пытаюсь обновить запись из внешнего приложения через сабж (0/dataservice/json/reply/UpdateQuery).

Формирую JSON

{
  "rootSchemaName": "UsrPrintTemplates",
  "operationType": 2,
  "filters": {
    "RootSchemaName": "UsrPrintTemplates",
    "logicalOperation": 0,
    "isEnabled": true,
    "filterType": 1,
    "ComparisonType": 3,
    "leftExpression": {
      "expressionType": 0,
      "columnPath": "UsrBitrixId"
    },
    "rightExpression": {
      "expressionType": 2,
      "parameter": {
        "dataValueType": 4,
        "value": 2098527
      }
    }
  },
  "columnValues": {
    "items": {
      "Name": {
        "expressionType": 2,
        "parameter": {
          "dataValueType": 1,
          "value": "Акт"
        }
      },
      "UsrFileType": {
        "expressionType": 2,
        "parameter": {
          "dataValueType": 0,
          "value": "dce4c8c1-4784-475e-8fac-7c244053095c"
        }
      }
    }
  },
  "isForceUpdate": false
}

Изображение удалено.Изображение удалено.

но у меня почему-то обновляются все записи в таблице, т.е. фильтр не отрабатывает.

Как мне его записать, чтобы обновилась 1 запись, в которой поле UsrBitrixId = 2098527 ?

Нравится

1 комментарий

Если есть доступ к базе, посмотрите в SQL-профайлере, что за запрос получается, с каким фильтром. Возможно, дело в неверно указанном типе для колонки UsrBitrixId.

Показать все комментарии

Здравствуйте! Может мне кто-то подскажет как делать запрос в DataService, и получать данные, например справочника, с учетом локализации.

Делаю аутентификацию:

{
  "UserName": "Supervisor",
  "UserPassword": "Supervisor"
}

И делаю например запрос справочника

 

{
	"RootSchemaName":"CaseCategory",
	"OperationType":0,
	"AllColumns":true
}

Мне возвращаются английские наменования справочника, хотя в локализируемых строках русские значения есть, и в интерфесе BPM они так же русские наименования значений.

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

Нравится

7 комментариев
Лучший ответ

Добрый день!

Добавьте в запрос признак "UseLocalization": true

Пример:

{
	"RootSchemaName":"CommunicationType",
	"OperationType":0,
	"AllColumns":true,
    "UseLocalization": true
}

 

Добрый вечер!

Локализируемые значения хранятся в таблицах с таким названием Sys + [Название основной таблицы] + Lcz, то есть в Вашем случае нужные Вам значения хранятся в таблице SysCaseCategoryLcz.

Алла Савельева,

Я это прекрасно понимаю, но такое себе, когда тебе нужно достать значения справочника, ещё и в таблицу Lcz лезть, проверять там значения нужной тебе локализации. Думал может есть какой-то параметр, при запросе через DataService, который сразу выдаст с локализацией.

Дульский Александр пишет:

Думал может есть какой-то параметр, при запросе через DataService, который сразу выдаст с локализацией.

Да, было бы отлично)))

Можете написать это, как идею на рассмотрение, в службу поддержки.

Алла Савельева,

Да, кстати, DataService походу не видит таблицу SysCaseCategoryLcz, т.к. выдает что 

"Элемент с именем \"SysCaseCategoryLcz\" не найден". Получается локализируемые строки никак не взять.

Дульский Александр,

Точно - она же системная, но можно на основании таблицы 'SysCaseCategoryLcz' создать представление и к нему обращаться для получения нужной информации.

Так даже удобнее - можно в представлении сразу указать, чтобы был выбор из нужной Вам локализации.

Добрый день!

Добавьте в запрос признак "UseLocalization": true

Пример:

{
	"RootSchemaName":"CommunicationType",
	"OperationType":0,
	"AllColumns":true,
    "UseLocalization": true
}

 

Сидоров Александр В.,

Спасибо огромное!

Показать все комментарии

Добрый день, может кто-нибудь подскажет, в каком формате правильно передавать данные в DataService, для поля с типом varbinary(max), т.е. байты файла. Сейчас при попытке создания записи детали файлы и ссылки, возникает след. ошибка: 'Ссылка на объект не указывает на экземпляр объекта'.

                  "Items": {
                        "Name": {
                            "ExpressionType": 2,
                            "Parameter": {
                                "DataValueType": 1,
                                "Value": "test.doc"
                            }
                        },
                        "Data": {
                            "ExpressionType": 2,
                            "Parameter": {
                                "DataValueType": 13,
                                "Value":   base64.encodebytes(fi).decode('ascii')
                            }
                        }
                    }

или так 

                  "Items": {
                        "Name": {
                            "ExpressionType": 2,
                            "Parameter": {
                                "DataValueType": 1,
                                "Value": "test.doc"
                            }
                        },
                        "Data": {
                            "ExpressionType": 2,
                            "Parameter": {
                                "DataValueType": 13,
                                "Value": 0x504B030414000600080000002100DFA4D26C...
                            }
                        }
                    }

всё равно та же ошибка, может кто-нибудь подскажет как правильно передавать байты.

Нравится

3 комментария

Я думаю что DataService не работает с varbinary(max), посмотрите как реализована загрузка и скачивание файлов на детали [Файлы и ссылки].

В догонку в документации, указано что

контакт UploadFile - Класс выгрузки файла. Не рекомендуется использовать.

Для работы с файлами используется не DataService, а FileService и FileApiService. Вот пример скачивания, а вот — загрузки.

Показать все комментарии

Добрый день!

есть ли возможность обратиться к BpmOnline из клиентской части стороннего приложения?

допустим у меня есть какая-то простая страничка, бэк части у нее нет, только фронт , который данные тянет вызовом сервисов.

можно ли вызвать DataService из js стороннего приложения?

если можно, то где можно посмотреть примеры

если я правильно понимаю, то можно работать при помощи oData из js стороннего приложения, но примеров тоже не нашла. 

 

 

Нравится

4 комментария

Добрый день

Из клиентского приложения можно легко работать с DataService. Для этого нужно:

1. Авторизоваться в bpmonline

2. Отправлять данные

Здесь есть описание по авторизации https://academy.terrasoft.ua/documents/technic-sdk/7-12/integraciya-s-sistemoy-i-vneshniy-api

С клиентской стороны вы можете организовать "общение" c помощью ajax или XmlHttpRequest

Так как это будут кросс-доменные запросы, то вам нужно это учитывать

https://www.html5rocks.com/en/tutorials/cors/

https://stackoverflow.com/questions/298745/how-do-i-send-a-cross-domain-post-request-via-javascript

год назад писали, что это невозможно

https://community.terrasoft.ru/questions/cors-i-avtorizacia-iz-klientsk…

получается, теперь эта возможность доступна?

у вас нет примера подключения, пока возникают сложности с подключением

Коллеги, кто сталкивался с подобной проблемой?

В конфиг сайта добавил <httpProtocol>

      <customHeaders>

        <add name="X-Frame-Options" value="SAMEORIGIN" />

<add name="Access-Control-Allow-Origin" value="*" />

<add name="Access-Control-Allow-Methods" value="GET, PUT, POST, DELETE, OPTIONS" />

<add name="Access-Control-Allow-Credentials" value="true" />

<add name="Access-Control-Allow-Headers" value="X-PINGOTHER, Origin, Cache-Control, Content-Type, Authorization, X-Requested-With, Accept" />

      </customHeaders>

    </httpProtocol>

 

С помощью JS отправляю запрос

$.ajax({
   url: serviceUrl + 'ContactCollection',
   headers: {
      'Content-Type': 'application/json;odata=verbose',
      'Authorization': 'Basic ' + btoa('Юзер:Пароль')
   },
   dataType: "json",
   data:  JSON.stringify({"Name": "123"}),
   method: 'POST'
});

Возвращается 401 ошибка, права Юзер в права доступ на операции к OData предоставил, в объекте Contact к OData также дал. Запросы кросс-доменные. в чем проблема?

Евгений Волоцкой,

Евгений, если зайти под пользователем в систему, он может перейти в раздел контакты? 

Показать все комментарии