Добрый день!

Мне необходимо вызвать веб-сервис и прочитать .csv файл. Версия on-site.

В Исходном коде пишу такой код (код рабочий):

namespace Terrasoft.Configuration
{
	using System.ServiceModel;
	using System.ServiceModel.Web;
	using System.ServiceModel.Activation;
	using Terrasoft.Web.Common;
	using System.Collections.Generic;
 
	[ServiceContract]
	[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]
	public class ClassService : BaseService
	{
		[OperationContract]
		[WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.Wrapped,
			RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
		public void MethodService()
		{
			ReadCSVFile();
		}
		static void ReadCSVFile()
		{
			var lines = System.IO.File.ReadAllLines(@"E:\new1.csv");
			var list = new List<MyContact>();
 
			foreach (var line in lines)
			{
				var values = line.Split(';');
				var myContact = new MyContact() { FirstName = values[0], LastName = values[1], Age = values[2] };
				list.Add(myContact);
			}
		}
	}
 
	public class MyContact
	{
		public string FirstName { get; set; }
		public string LastName { get; set; }
		public string Age { get; set; }
	}
 
}

Проверяю в Postman вызовом веб-сервиса.

Получаю ошибку:

The server encountered an error processing the request. The exception message is 'The device is not ready. '. See server logs for more details. The exception stack trace is:
 
at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost) at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost) at System.IO.StreamReader..ctor(String path, Encoding encoding, Boolean detectEncodingFromByteOrderMarks, Int32 bufferSize, Boolean checkHost) at System.IO.StreamReader..ctor(String path, Encoding encoding) at System.IO.File.InternalReadAllLines(String path, Encoding encoding) at Terrasoft.Configuration.QlikClassService.ReadCSVFile() at Terrasoft.Configuration.QlikClassService.QlikMethodService() at SyncInvokeQlikMethodService(Object , Object[] , Object[] ) at System.ServiceModel.Dispatcher.SyncMethodInvoker.Invoke(Object instance, Object[] inputs, Object[]& outputs) at System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc& rpc) at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5(MessageRpc& rpc) at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage11(MessageRpc& rpc) at System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet)

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

Нравится

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

Проблема решена. Необходимо было в настройках Безопасности конкретного файла добавить IIS_IUSRS и поставить нужные отметки.

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

 

Доброго времени суток!

Прошу подсказать - столкнулся с такой задачей:

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

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

В чем может быть проблема?

Нравится

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

Добрый день.

 

Вносите данные через пункт [Импорт данных] главного меню:

 

Показать все комментарии
Странно, очень странно, что в такой замечательной CRM нет банальной выгрузки в платформонезависимый формат табличных данных CSV:http://ru.wikipedia.org/wiki/CSV Очень хотелось бы такой нехитрый функционал для экспорта данных из Terrasoft XRM в этом формате данных.
2 комментария

Добрый день!

Прошу уточнить, о ккой системе идет речь?
Дело в том, что в BPMonline данная функция уже реализована и выгрузка данных происходит именнов CSV формат.

Если нужно в конкретном разделе, можно добавить вручную.

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

Добрый день!
Подскажите, пожалуйста,
как можно выгрузить в скрипте данные из датасета в формат csv?

Нравится

5 комментариев

К примеру, выгрузим в csv файл, имя контрагента, ответственного и вид деятельности

	var Dataset = dlData.Dataset;
    var CopyDataset = Dataset.CreateCopy();
    var fso = System.CreateObject("Scripting.FileSystemObject");  
         try
         {
                   var f = fso.CreateTextFile("C:\\test.csv", true);
         } catch (e) {}
         CopyDataset.Open();
         CopyDataset.GotoFirst();
         var s;
         while(!CopyDataset.IsEOF) {
 
                s = CopyDataset('Name');
	                   Owner = GetFieldValueFromDisabledField(CopyDataset, 'OwnerName');
                   if (Owner !== null) {
                            s = s + ',' + Owner;}
                   Activity = GetFieldValueFromDisabledField(CopyDataset, 'ActivityName');
                   if (Activity !== null) {
                            s = s + ',' + Activity;}       
                   f.writeline(s);
                   CopyDataset.GotoNext();
			    }    
         CopyDataset.Close ();
         f.Close();
         MessageBox('Exported');

dlData - не визуальный компонент окна, к которому привязан DataSet
Данный код предполагает что есть DataSet в котором выгружаются поля Name - имя контрагента,
OwnerName - ответственный, ActivityName - вид деятельности, данные для дата сета берутся с соответствующего сервиса Select Query

Спасибо большое.
А если нужно выбирать путь и название файла?

Вы имеете в виду открывать окно выбора файла (OpenDialog) как на пример в notepad при нажатии Файл -> Открыть ?

Да, т.е. необходимо, чтобы путь "C:\\test.csv" был не зашит в скрипте, а выбирался

Предлагаю использовать конструкцию:

var FileName = System.CreateObject('TSObjectLibrary.Value');
	if (!(System.OpenDialog(FileName, '*.*', EmptyStr,
		"Выберете файл", EmptyStr))) 
		{
        return;
	}
	MessageBox(FileName.Value);

MessageBox(FileName.Value) тут выводиться для проверки результатов.
Также предлагаю посмотреть тему http://community.terrasoft.ru/forum/topic/1060

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