|
03.08.2009, 13:34 | #1 |
Участник
|
действительноСпасибо!
Думаю закрывать эту тему не будем пока, так как в скором будущем появятся ещё вопросы Кстати, может подскажите с чего начать. В заказах и предложениях необходимо реализовать возможность отправления отчёта на мыло бизнес-партнёра, для которого и формируется данный отчёт.Отчёт написан. |
|
03.08.2009, 13:52 | #2 |
Чайный пьяница
|
Цитата:
1. Собственно формировать отчёт и экспортировать его в файл. Посмотрите это. 2. Создавать письмо и вкладывать в него сформированный на шаге 1 файл. 3. Отправлять созданное в п.2 письмо.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
04.08.2009, 10:37 | #3 |
Участник
|
Решил начать с формирования отчёта и экспорта его в файл.
Не совсем понимаю,что писать в reportPath туда ведь прописывается путь, по которому находится наш отчёт? |
|
04.08.2009, 10:46 | #4 |
Чайный пьяница
|
Цитата:
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
04.08.2009, 10:49 | #5 |
Участник
|
Отчёт у меня опубликован через Reporting Services. Необходимый мне отчёт находится по пути:http://[Сервер_отчётности]/Reports/P...bd%d0%b8%d1%8f.То есть переадётся ещё куча параметров...
|
|
04.08.2009, 10:54 | #6 |
Чайный пьяница
|
Цитата:
Сообщение от moskalevas
Отчёт у меня опубликован через Reporting Services. Необходимый мне отчёт находится по пути:http://[Сервер_отчётности]/Reports/P...bd%d0%b8%d1%8f.То есть переадётся ещё куча параметров...
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
04.08.2009, 11:50 | #7 |
Участник
|
Отчёт формируется и экспортируется, только проблема в том, что он "обрезается", то есть не помещается весь по ширине на страницу.Не подскажите как задать параметры?
|
|
06.08.2009, 11:56 | #8 |
Участник
|
Цитата:
Сообщение от a33ik
Добрый день. Сразу скажу, что простыми кастомизациями - не обойдёшься. Рекомендую написать кастомный WorkFlow action (пример тут), который будет:
1. Собственно формировать отчёт и экспортировать его в файл. Посмотрите это. 2. Создавать письмо и вкладывать в него сформированный на шаге 1 файл. 3. Отправлять созданное в п.2 письмо. Регистрирую, создаю бизнес-процесс, который отправляет отчёт "Прайс-лист"(отчёт без всяких парметров) из формы ЗАКАЗЫ. но почему-то никакое письмо не отправляется Не пойиу в чём проблема. |
|
06.08.2009, 12:09 | #9 |
Чайный пьяница
|
Цитата:
Сообщение от moskalevas
Пробую воспользоваться вашим примером: http://a33ik.blogspot.com/2009/08/cu...h-renders.html
Регистрирую, создаю бизнес-процесс, который отправляет отчёт "Прайс-лист"(отчёт без всяких парметров) из формы ЗАКАЗЫ. но почему-то никакое письмо не отправляется Не пойиу в чём проблема.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
06.08.2009, 12:26 | #10 |
Участник
|
Создал проект Class Project, добавил необходимые References, как и в примере, добавил код:
using System; using System.Collections.Generic; using System.Text; using Microsoft.Crm.Sdk; using Microsoft.Crm.SdkTypeProxy; using Microsoft.Crm.Workflow; using System.Workflow.Activities; using System.Workflow.ComponentModel; using System.ServiceModel; using System.Security.Principal; namespace SendReportAction { [CrmWorkflowActivity("Execute and send a report")] public class SendReport : SequenceActivity { protected override ActivityExecutionStatus Execute(ActivityExecutionContext executionContext) { if (MailRecipient != null && !MailRecipient.IsNull && !MailRecipient.IsNullSpecified) { //создание email*************************************************************************************** IContextService contextService = (IContextService)executionContext.GetService(typeof(IContextService)); IWorkflowContext workflowContext = contextService.Context; ICrmService crmservice = workflowContext.CreateCrmService(); email mail = new email(); activityparty fromparty = new activityparty(); fromparty.partyid = new Lookup(); fromparty.partyid.type = EntityName.systemuser.ToString(); fromparty.partyid.Value = workflowContext.UserId; mail.from = new activityparty[] { fromparty }; activityparty toparty = new activityparty(); toparty.partyid = new Lookup(); toparty.partyid.type = EntityName.systemuser.ToString(); toparty.partyid.Value = workflowContext.UserId; mail.to = new activityparty[] { toparty }; mail.subject = "Report Subscription"; mail.sender = "babayan@mail.ru"; mail.description = "Report Subscription"; mail.ownerid = new Owner(); mail.ownerid.type = EntityName.systemuser.ToString(); mail.ownerid.Value = workflowContext.UserId; Guid createdEmailGuid = crmservice.Create(mail); //***************************************************************************************************** //формирование и экспорт отчёта************************************************************************ Reporting.SessionHeader sessionheader = null; byte[] result; string encoding; string mimetype; Reporting.ParameterValue[] parametersUsed = null; Reporting.Warning[] warnings; string[] streamids; BasicHttpBinding binding = new BasicHttpBinding(BasicHttpSecurityMode.TransportCredentialOnly); binding.Security.Message.ClientCredentialType = BasicHttpMessageCredentialType.UserName; binding.Security.Mode = BasicHttpSecurityMode.TransportCredentialOnly; binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Windows; binding.Security.Transport.ProxyCredentialType = HttpProxyCredentialType.None; binding.Security.Transport.Realm = string.Empty; EndpointAddress endpoint = new EndpointAddress(ServiceURL); Reporting.ReportingServiceSoapClient client = new Reporting.ReportingServiceSoapClient(binding, endpoint); client.ClientCredentials.Windows.AllowedImpersonationLevel = TokenImpersonationLevel.Impersonation; client.Render(ref sessionheader, ReportName, "Excel", null, null, null, null, null, out result, out encoding, out mimetype, out parametersUsed, out warnings, out streamids); //***************************************************************************************************** //прикрепление отчёта к письму************************************************************************* activitymimeattachment attach = new activitymimeattachment(); attach.activityid = new Lookup(EntityName.email.ToString(), createdEmailGuid); attach.body = System.Convert.ToBase64String(result); attach.subject = "Report Subscription"; attach.filename = "Report.xls"; attach.filesize = new CrmNumber(result.Length); attach.mimetype = @"application/vnd.ms-excel"; crmservice.Create(attach); //***************************************************************************************************** //отправка письма************************************************************************************** SendEmailRequest sendrequest = new SendEmailRequest(); sendrequest.EmailId = createdEmailGuid; sendrequest.TrackingToken = ""; sendrequest.IssueSend = true; crmservice.Execute(sendrequest); } return ActivityExecutionStatus.Closed; } //объявляем URL of Reporting Service public static DependencyProperty ServiceURLProperty = DependencyProperty.Register("ServiceURL", typeof(string), typeof(SendReport)); [CrmInput("ServiceURL")] public string ServiceURL { get { return (string)base.GetValue(ServiceURLProperty); } set { base.SetValue(ServiceURLProperty, value); } } //объявляем ReportName public static DependencyProperty ReportNameProperty = DependencyProperty.Register("ReportName", typeof(string), typeof(SendReport)); [CrmInput("ReportName")] public string ReportName { get { return (string)base.GetValue(ReportNameProperty); } set { base.SetValue(ReportNameProperty, value); } } //объявляем MailRecipient (получатель письма) public static DependencyProperty MailRecipientProperty = DependencyProperty.Register("MailRecipient", typeof(Lookup), typeof(SendReport)); [CrmInput("MailRecipient")] [CrmReferenceTarget("systemuser")] public Lookup MailRecipient { get { return (Lookup)base.GetValue(MailRecipientProperty); } set { base.SetValue(MailRecipientProperty, value); } } } } Далее застронгнеймил сборку и опубликовал. В Dynamics CRM создаю бизнес-процесс. Объект - ЗАКАЗ. В ServiceURL:http://[назва_сервера]/Reportserver/ReportService.asmx, ReportName:/Новая папка/Прайс-лист, MailRecipient:[имя получателя]. Опубликовал бизнес-процесс. На форме ЗАКАЗ появилась кнопка Выполнить бизнес-процесс, но e-mail не отсылается. |
|
06.08.2009, 12:31 | #11 |
Чайный пьяница
|
На кнопку - Выполнить - нажимали?
Отчёт - параметризирован? Под какой учётной записью запущен Асинхронный Сервис CRM? Рекомендую посмотреть логи Асинхронного Сервиса, думаю, что ответ почему письмо не отправлено - кроется именно там.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit Последний раз редактировалось a33ik; 06.08.2009 в 12:33. |
|
06.08.2009, 13:14 | #12 |
Участник
|
Пытаюсь сформировать и экспортировать отчёт без параметров.
Асинхронный Сервис CRM вроде как запущен под учётной записью того человека, который ставил это всё. Как просмотреть логи Асинхронного Сервиса? При регистрации надо было регистрировать Stepы? Последний раз редактировалось moskalevas; 06.08.2009 в 13:19. |
|
Теги |
c#, custom workflow action, plugin, workflow, reporting services, report |
|
|