|
![]() |
#1 |
Участник
|
Вобщем так у меня проблема с вложением отчёта в письмо и не разрешается...
Письмо само вкладывается, а данных там так и нет. Попытался сделать немного по-другому(не как у вас в примере): ksdb3.ReportExecutionService rs = new ksdb3.ReportExecutionService(); rs.Credentials = System.Net.CredentialCache.DefaultCredentials; string format = "Excel"; byte[] result = null; string reportPath = "/Новая папка/Прайс-лист"; string encoding; string mimeType; string extension; ksdb3.Warning[] warnings = null; string[] streamIDs = null; ksdb3.ExecutionInfo execInfo = new ksdb3.ExecutionInfo(); ksdb3.ExecutionHeader execHeader = new ksdb3.ExecutionHeader(); rs.ExecutionHeaderValue = execHeader; execInfo = rs.LoadReport(reportPath, null); string SessionID = rs.ExecutionHeaderValue.ExecutionID; result = rs.Render(format, null, out extension, out encoding, out mimeType, out warnings, out streamIDs); Всё равно то же самое. Сейчас хочу cохранить в файл, вообще, что получает result. Для этого дальше помещаю следующий код: [I]int i; StreamWriter sw = new StreamWriter("C:\\temp.txt"); for (i = 0; i < result.Length; i++) { sw.WriteLine(result); } sw.Close(); В логах асинхронного сервиса пишет: [2009-08-11 16:18:33.2] Process:CrmAsyncService |Organization:e26d7e2d-33b0-417e-8875-7e0c045fda3e |Thread: 4 |Category: Platform.Workflow |User: 00000000-0000-0000-0000-000000000000 |Level: Error | WorkflowHost.OnWorkflowTerminated >Workflow terminated: {5615DD03-7186-DE11-9267-000E0C4BF7BF} - System.UnauthorizedAccessException: Отказано в доступе по пути "C:\temp.txt". в System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) в 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) в System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options) в System.IO.StreamWriter.CreateFile(String path, Boolean append) в System.IO.StreamWriter..ctor(String path, Boolean append, Encoding encoding, Int32 bufferSize) в System.IO.StreamWriter..ctor(String path) в SendReportAction.SendReport.Execute(ActivityExecutionContext executionContext) в System.Workflow.ComponentModel.ActivityExecutor`1.Execute(T activity, ActivityExecutionContext executionContext) в System.Workflow.ComponentModel.CompositeActivityExecutor`1.Execute(T activity, ActivityExecutionContext executionContext) в System.Workflow.ComponentModel.ActivityExecutor`1.Execute(Activity activity, ActivityExecutionContext executionContext) в System.Workflow.ComponentModel.ActivityExecutionFilter.Execute(Activity activity, ActivityExecutionContext executionContext) в System.Workflow.ComponentModel.FaultAndCancellationHandlingFilter.Execute(Activity activity, ActivityExecutionContext executionContext) в System.Workflow.ComponentModel.ActivityExecutorOperation.Run(IWorkflowCoreRuntime workflowCoreRuntime) в System.Workflow.Runtime.Scheduler.Run() Почему отказано в доступе не пойму... P.S. При запуске отчёта под пользователем, под учётной записью которого работает асинхронный сервис - в отчёт попадают данные. Зато при запуске Асинхронного сервиса от имени пользователя, который ставил всё(то есть имеет все права) письмо даже не создаётся. В логах пишет следующее: [2009-08-11 16:57:44.0] Process:CrmAsyncService |Organization:e26d7e2d-33b0-417e-8875-7e0c045fda3e |Thread: 21 |Category: Platform.Async |User: 00000000-0000-0000-0000-000000000000 |Level: Error | AsyncOperationCommand.Execute >Exception while trying to execute AsyncOperationId: {1C98A682-7686-DE11-9267-000E0C4BF7BF} AsyncOperationType: 1 - в System.Web.Services.Protocols.SoapHttpClientProtocol.ReadResponse(SoapClientMessage message, WebResponse response, Stream responseStream, Boolean asyncCall) в System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName, Object[] parameters) в Microsoft.Crm.SdkTypeProxy.CrmService.Retrieve(String entityName, Guid id, ColumnSetBase columnSet) в Microsoft.Crm.Asynchronous.SdkTypeProxyCrmServiceWrapper.Retrieve(String entityName, Guid id, ColumnSetBase columnSet) в Microsoft.Crm.Asynchronous.SdkPluginDescriptionProvider.GetPluginTypeDescription(Guid pluginTypeId, IOrganizationContext context) в Microsoft.Crm.Caching.PluginTypeCacheLoader.LoadCacheData(Guid key, IOrganizationContext context) в Microsoft.Crm.Caching.CrmMultiOrgCache`2.CreateEntry(TKey key, IOrganizationContext context) в Microsoft.Crm.Caching.CrmSharedMultiOrgCache`2.LookupEntry(TKey key, IOrganizationContext context) в Microsoft.Crm.Caching.PluginTypeCache.LookupEntry(Guid pluginTypeId, IOrganizationContext context) в Microsoft.Crm.Asynchronous.AsyncOperationCommand.GetPluginType(Guid pluginTypeId) в Microsoft.Crm.Asynchronous.EventOperation.InternalExecute(AsyncEvent asyncEvent) в Microsoft.Crm.Asynchronous.AsyncOperationCommand.Execute(AsyncEvent asyncEvent) |
|
![]() |
#2 |
Чайный пьяница
|
Цитата:
Сообщение от moskalevas
![]() Вобщем так у меня проблема с вложением отчёта в письмо и не разрешается...
Письмо само вкладывается, а данных там так и нет. Попытался сделать немного по-другому(не как у вас в примере): ksdb3.ReportExecutionService rs = new ksdb3.ReportExecutionService(); rs.Credentials = System.Net.CredentialCache.DefaultCredentials; string format = "Excel"; byte[] result = null; string reportPath = "/Новая папка/Прайс-лист"; string encoding; string mimeType; string extension; ksdb3.Warning[] warnings = null; string[] streamIDs = null; ksdb3.ExecutionInfo execInfo = new ksdb3.ExecutionInfo(); ksdb3.ExecutionHeader execHeader = new ksdb3.ExecutionHeader(); rs.ExecutionHeaderValue = execHeader; execInfo = rs.LoadReport(reportPath, null); string SessionID = rs.ExecutionHeaderValue.ExecutionID; result = rs.Render(format, null, out extension, out encoding, out mimeType, out warnings, out streamIDs); Всё равно то же самое. Сейчас хочу cохранить в файл, вообще, что получает result. Для этого дальше помещаю следующий код: [I]int i; StreamWriter sw = new StreamWriter("C:\\temp.txt"); for (i = 0; i < result.Length; i++) { sw.WriteLine(result); } sw.Close(); В логах асинхронного сервиса пишет: [2009-08-11 16:18:33.2] Process:CrmAsyncService |Organization:e26d7e2d-33b0-417e-8875-7e0c045fda3e |Thread: 4 |Category: Platform.Workflow |User: 00000000-0000-0000-0000-000000000000 |Level: Error | WorkflowHost.OnWorkflowTerminated >Workflow terminated: {5615DD03-7186-DE11-9267-000E0C4BF7BF} - System.UnauthorizedAccessException: Отказано в доступе по пути "C:\temp.txt". в System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) в 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) в System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options) в System.IO.StreamWriter.CreateFile(String path, Boolean append) в System.IO.StreamWriter..ctor(String path, Boolean append, Encoding encoding, Int32 bufferSize) в System.IO.StreamWriter..ctor(String path) в SendReportAction.SendReport.Execute(ActivityExecutionContext executionContext) в System.Workflow.ComponentModel.ActivityExecutor`1.Execute(T activity, ActivityExecutionContext executionContext) в System.Workflow.ComponentModel.CompositeActivityExecutor`1.Execute(T activity, ActivityExecutionContext executionContext) в System.Workflow.ComponentModel.ActivityExecutor`1.Execute(Activity activity, ActivityExecutionContext executionContext) в System.Workflow.ComponentModel.ActivityExecutionFilter.Execute(Activity activity, ActivityExecutionContext executionContext) в System.Workflow.ComponentModel.FaultAndCancellationHandlingFilter.Execute(Activity activity, ActivityExecutionContext executionContext) в System.Workflow.ComponentModel.ActivityExecutorOperation.Run(IWorkflowCoreRuntime workflowCoreRuntime) в System.Workflow.Runtime.Scheduler.Run() Почему отказано в доступе не пойму... P.S. При запуске отчёта под пользователем, под учётной записью которого работает асинхронный сервис - в отчёт попадают данные. Зато при запуске Асинхронного сервиса от имени пользователя, который ставил всё(то есть имеет все права) письмо даже не создаётся. В логах пишет следующее: [2009-08-11 16:57:44.0] Process:CrmAsyncService |Organization:e26d7e2d-33b0-417e-8875-7e0c045fda3e |Thread: 21 |Category: Platform.Async |User: 00000000-0000-0000-0000-000000000000 |Level: Error | AsyncOperationCommand.Execute >Exception while trying to execute AsyncOperationId: {1C98A682-7686-DE11-9267-000E0C4BF7BF} AsyncOperationType: 1 - в System.Web.Services.Protocols.SoapHttpClientProtocol.ReadResponse(SoapClientMessage message, WebResponse response, Stream responseStream, Boolean asyncCall) в System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName, Object[] parameters) в Microsoft.Crm.SdkTypeProxy.CrmService.Retrieve(String entityName, Guid id, ColumnSetBase columnSet) в Microsoft.Crm.Asynchronous.SdkTypeProxyCrmServiceWrapper.Retrieve(String entityName, Guid id, ColumnSetBase columnSet) в Microsoft.Crm.Asynchronous.SdkPluginDescriptionProvider.GetPluginTypeDescription(Guid pluginTypeId, IOrganizationContext context) в Microsoft.Crm.Caching.PluginTypeCacheLoader.LoadCacheData(Guid key, IOrganizationContext context) в Microsoft.Crm.Caching.CrmMultiOrgCache`2.CreateEntry(TKey key, IOrganizationContext context) в Microsoft.Crm.Caching.CrmSharedMultiOrgCache`2.LookupEntry(TKey key, IOrganizationContext context) в Microsoft.Crm.Caching.PluginTypeCache.LookupEntry(Guid pluginTypeId, IOrganizationContext context) в Microsoft.Crm.Asynchronous.AsyncOperationCommand.GetPluginType(Guid pluginTypeId) в Microsoft.Crm.Asynchronous.EventOperation.InternalExecute(AsyncEvent asyncEvent) в Microsoft.Crm.Asynchronous.AsyncOperationCommand.Execute(AsyncEvent asyncEvent) По поводу второго - а на данный момент тот пользователь, который ставил - обладает доступом к CRM, т.е. имеет право на создание записей и т.п.?
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit Последний раз редактировалось a33ik; 11.08.2009 в 17:22. |
|
![]() |
#3 |
Участник
|
Заработало!
![]() Ошибка заключалась в том, что в коде необходимо было дописать от кого подключаемся к Reporting Services. Так как у нас Асинхронный сервис был запущен от имени NT AUTHORITY\Network service, то и к Reporting Services он пытался подключиться от этого же имени. То есть просто добавил строчку: rs.Credentials = new System.Net.NetworkCredential("username", "password", "domain"); Осталось сделать, чтобы параметр для отчёта брался с самой формы ЗАКАЗ. |
|
![]() |
#4 |
Чайный пьяница
|
Цитата:
Сообщение от moskalevas
![]() Заработало!
![]() Ошибка заключалась в том, что в коде необходимо было дописать от кого подключаемся к Reporting Services. Так как у нас Асинхронный сервис был запущен от имени NT AUTHORITY\Network service, то и к Reporting Services он пытался подключиться от этого же имени. То есть просто добавил строчку: rs.Credentials = new System.Net.NetworkCredential("username", "password", "domain"); Осталось сделать, чтобы параметр для отчёта брался с самой формы ЗАКАЗ. ![]()
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
![]() |
#5 |
Участник
|
Цитата:
![]() А для того, чтобы из формы ЗАКАЗ передавался параметр для отчёта в репортинг необходимо добавить что-то вроде: ParameterValue[] parameters = new ParameterValue[1]; parameters[0] = new ParameterValue(); parameters[0].Name = "Param2"; parameters[0].Value = "ФУА Северодвинска"; Как в Value передать значение аттрибута name из формы ЗАКАЗ? |
|
![]() |
#6 |
Чайный пьяница
|
Цитата:
Сообщение от moskalevas
![]() Так я и запускал Асинхронный Сервис под учёткой пользователя который имеет доступ на репортинг сервис. Тогда он вообще не создавао письмо...Теперь у меня асинхронный сервис запущен от имени NT AUTHORITY\Network, но в коде дополнительно прописано подключение к Reporting Services от имени пользователя, который имеет доступ к нему
![]() А для того, чтобы из формы ЗАКАЗ передавался параметр для отчёта в репортинг необходимо добавить что-то вроде: ParameterValue[] parameters = new ParameterValue[1]; parameters[0] = new ParameterValue(); parameters[0].Name = "Param2"; parameters[0].Value = "ФУА Северодвинска"; Как в Value передать значение аттрибута name из формы ЗАКАЗ? Посмотрите http://a33ik.blogspot.com/2009/06/cr...record-in.html. Можно получить идентификатор записи, которая вызвала запуск воркфлова и уже исходя из этой записи - получить любое поле этой записи.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
|
За это сообщение автора поблагодарили: moskalevas (1). |
![]() |
#7 |
Участник
|
Цитата:
Сообщение от a33ik
![]() Вы можете получить это значение в теле Custom WorkFlow Action.
Посмотрите http://a33ik.blogspot.com/2009/06/cr...record-in.html. Можно получить идентификатор записи, которая вызвала запуск воркфлова и уже исходя из этой записи - получить любое поле этой записи. Пытаюсь передавать параметр следующим образом: salesorder sss = (salesorder)crmservice.Retrieve(EntityName.salesorder.ToString(), workflowContext.OrganizationId, new ColumnSet(new string[] { "name" })); string sales = sss.name; ParameterValue[] parameters = new ParameterValue[1]; parameters[0] = new ParameterValue(); parameters[0].Name = "Param2"; parameters[0].Value = sales.ToString(); Но отчёт не вкладывается...Не могли бы кинуть ссылочку, где поподробнее говорится о том, как получать значения полей с разных форм в теле Custom WorkFlow Action? |
|
Теги |
c#, custom workflow action, plugin, workflow, reporting services, report |
|
|