О .Net, C#, ASP.Net, SharePoint и прочем.

Google
 
Web totmakov.blogspot.com

вторник, августа 07, 2007

Ошибка при запуске custom workflow

Несколько дней потратил на мучение с одной очень неприятной ошибкой. Причем судя по результатам гугления можно сказать что очень многие сталкивались с этой ошибкой и мало кто представляет что с этим делать и из-за чего такое может происходить, по крайней мере я в интернете ответа так и не нашел, но до сути проблемы все-таки докопался - попытаюсь вкратце описать.

Итак.

Создаем workflow для SharePoint'а, например, пользуясь этой инструкцией, развертываем его на сервере, запускаем... Оп! Сбой при запуске, повторная попытка, бла-бла-бла. В логе SharePoint пишет что-то про пустой контекст и т.д. Хмм... смотрим в инструкцию, смотрим на свой код/дизайнер, ничего не понимаем, смотрим еще раз и т.д. как в том анекдоте про программиста и инструкцию на тюбике с шампунем.

Если смотреть многочисленные примеры создания workflow, то можно увидеть в них такую строчку в методе onWorkflowActivated_MethodInvoking:

workflowId = workflowProperties.WorkflowId;

Так-так-так. workflowId, думаем мы и добавляем в класс нашего workflow:

public Guid workflowId = default(System.Guid);

Без задней мысли. Правда ведь? Gotcha! В тех же примерах можно видеть, если прочитать их внимательней, что для Activity OnWorkflowActivated в свойствах в дизайнере нужно указать worflowId и workflowProperties (точнее создать их). Стоп. worflowId? Смотрим еще раз:

WorkflowProperties есть, но где же WorkflowId? Его нет. А указать его нужно. Вот так.

Баг? Фича? Может так все и задуманно?

Как заставить эту штуку работать? Открываем Workflow1.Designer.cs и под комментарием, в котором написано, что ничего руками исправлять ни в коем случае не нужно, в теле метода InitializeComponent дописываем следующи строки:

System.Workflow.ComponentModel.ActivityBind idactivitybind = new System.Workflow.ComponentModel.ActivityBind();
idactivitybind.Name = "Workflow1";
idactivitybind.Path = "workflowId";
this.onWorkflowActivated1.SetBinding(Microsoft.SharePoint.WorkflowActions.OnWorkflowActivated.WorkflowIdProperty, ((System.Workflow.ComponentModel.ActivityBind)(idactivitybind)));

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

З.Ы. Естественно, замените Workflow1 на название вашего workflow.

З.Ы. Судя по всему у многих все работает нормально. Это оттого, что они используют шаблоны проектов из последнего Starter Kit (например, здесь). В этих шаблонах при создании проекта есть один workflow, в нем уже есть OnWorkflowActivated activity, и уже установленны нужные свойства. Я не думаю, что этот шаблон хорош для больших проектов, где нужно создавать много рабочих процессов и других элементов features.

Мне очень понравилась утилита WSPBuilder. Я интегрировал ее в процесс сборки проекта по нажатию кнопки build и добавил код для обновления проекта на сервере. Рекомендую ;)

четверг, марта 29, 2007

"Вопросы параллелизма" от Джеффри Рихтера

В мартовском номере MSDN Magazine с.г. опубликована замечательная статья уже легендарного Джеффри Рихтера - "Вопросы параллелизма. Реализация модели асинхронного программирования в CLR."
"Об использовании APM CLR много написано, включая 23 главу моей книги CLR via C#, издание 2 (Microsoft Press®, 2006). Тем не менее, мне неизвестно, чтобы где-нибудь объяснялось, как определить класс, методы которого реализовали бы APM. Поэтому я решил остановиться на этом в этой статье."
В статье на конкретном примере рассматривается создание класса, реализующего интерфейс IAsyncResult, являющегося одной из концептуальных вещей в APM CLR, а также описывается внутреннее устройство механизма асинхронных вызовов, последовательности вызовов методов, раскрыты некоторые тонкости реализации.

Русский перевод статьи можно прочитать здесь.



Ярлыки: ,

пятница, ноября 03, 2006

Большой переезд

Совсем я забросил в последнее время свой блог... Ни одного нового поста за последний месяц! Это связанно больше с моим большим переездом - я сменил место работы. В связи с этим, скорее всего, изменится и тематика большинства постов. Если до этого я предполагал (но в итоге не совсем получилось), что будет большое количество постов, связанных с Веб-расширением 1С, то теперь я буду работать с SharePoint 2007. По-моему это намного интересней.

Буквально сегодня предстоит демонстрация прототипа будущей системы заказчику, в работе над которой я принимаю непосредственное участие. Этот прототип создавался последние две недели. Собственно все время, что я работаю на новой работе. За это время я успел немного вникнуть в SharePoint, посмотреть, пощупать некторые его фичи, поковырять внутренности.

Очень надеюсь, что в ближайшее время я все-таки найду время, чтобы опубликовать свои некоторые впечатления о новом SharePoint'е, в том числе и описать некоторые его элементы, с которыми довелось поработать за это время. Постараюсь больше не делать таких больших перерывов.

Пока что все. До связи.

среда, сентября 06, 2006

Что такое SharePoint

Появилась мысль по поводу того как простыми словами можно объяснить что такое SharePoint.


Представьте себе такую картину. Огромный многоэтажный офис со множеством отделов. отделы хаотично разбросаны по всему офису. В организации одновременно ведется работа над несколькими проектами, либо просто работа в различных областях деятельности организации - начисление зарплаты за август, открытие нового филиала, проведение акции по скидкам в розничных точках, кампания по набору промоутеров и пр. При этом в одном проекте или виде деятельности участвуют как правило люди из различных отделов. Им необходимо обмениваться документами, оповещать других о новостях, назначать собрания, обсуждать какие-либо нюансы и пр.

Теперь представьте огромный холл где-то в центре офиса. В этом холле расположены большие столы. К каждому столу прикреплена доска, на которую можно прикреплять бумажки с записями. На столе расположены папки, в которые можно класть документы. Над каждым столом висит табличка с указанием предназначения этого стола. Например, "Открытие нового филиала". У каждого стола стоит охранник, а у каждого сотрудника есть пропуска надоступ к определенным столам. Пропуска могут быть на чтение документов, на работу над документами, на изменение положения папок, календарей и досок объявление и на выдачу новых пропусков. Сотрудник подходит к столу - охраниик проверяет пропуск. Представьте, также, что столы в холле расположены оптимальным образом и имеется очень удобная и быстрая система нахождения пути к нужному столу, через какой вход бы сотрудник не зашел.

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

Представили? Так вот SharePoint - это и есть такой холл.

вторник, сентября 05, 2006

Не только Excel 12 так может!







Олег Михайлик в очередной раз нашел поразительно интересную вещь!

Вы смотрели на Excel 12 и облизывались какие красивые столбчатые диаграммы он строит прямо в таблице?
Не торопитесь выкидывать свой Excel 97! Он тоже так может! :)

Если у вас русский Excel, попробуйте использовать функцию =ПОВТОР("|";A1), где А1 - ссылка на ячейку с числом.

Почему ПО такое нестабильное?

Почему ПО, которое вроде бы должно работать стабильно в практически неизменяемой среде, в самые неожиданные моменты и без видимых причин дает сбой?!

Вот сегодня я пришел на работу, запустил студию, открыл проект веб-интерфейса 1С 8.0. Запустил страницу на просмотр в браузере, а он мне в ответ: "СОМ-соединение не может найти ключ защиты". Это при том, что Предприятие на моей машине запускается, веб-интерфейс, развернутый на нашем интранет-сервере, тоже нормально работает. Как это починить? Я перезагрузил компьютер и все заработало! Почему? Что могло измениться за ночь? Кто знает...

Или вот. Недавно я помогал одной девушке в нашем офисе, которая позвонила в службу техподдержки. У нее Excel не позволял редактировать документ в SharePoint. Оказалось, что Excel не позволял редактировать документы вообще. Т.е. совсем не реагировал на нажатия клавиш на клавиатуре! В taskmanager'е процесса Excel не оказалось вообще. Т.е. приложение видно было, а процесса EXCEL.EXE не было. Странно, не правда ли? А знаете чем это все лечилось? Правильно. Перезагрузкой компьютера.

Примеров таких сбоев можно найти огромное количество. Всякий раз, когда средний пользователь говорит, что у него вирус, это скорее всего у него произошел один из таких магических сбоев.Самое дурное в таких сбоях - это то, что их нельзя предсказать. Вы можете прийти на работу утром и обнаружить, что у вас не может стартовать какой либо процесс или служба, и сообщение об ошибке может выглядеть так: 0x80004005 General Fault. И все. Или при нажатии на кнопку выдаться MessageBox с надписью Object reference not set to an instance of an object. Нужно быть преемником Ванги, чтобы догадаться сразу, что произошло.Давайте мы с вами не будем допускать подобных вольностей?

Давайте постараемся сделать наши продукты максимально стабильными, и, если уж они заваливаются, сообщения об ошибках или записи в логах максимально информативными!

вторник, августа 29, 2006

Завтрак сисадмина

Если вы работаете сисадмином и вам иногда на работе хочется жаренного мяса - здесь туториал с фотографиями по настройке оборудования:

http://dashing.livejournal.com/1843142.html

понедельник, августа 28, 2006

Microsoft ищет таланты для команды SQL Server

Майкрософт объявляет набор разработчиков и тестеров в группу SQL Server в свою штаб-квартиру в Редмонде. Необходимы уверенные навыки написания кода, опыт с/с++, а также видение и желание достигать технического совершенства.

Вот текст письма, которое я получил от Холли Петерсон (Holly Peterson).


---------------------------------------------------------------

Hi there, I am a technical recruiter here at Microsoft USA. I saw your name and scores on Brainbench and thought you might be interested in the opportunity below. If you are interested please send your CV to russiacv@microsoft.com. Or if you know someone that might be interested, or a blog, website or bulletin board where you could post this the help would be appreciated in getting the word out.
If you have already sent your CV in the past 6 months there is no need to send it again.
Thank you!
Holly S Peterson
Sr. International Staffing Consultant
Microsoft Corporation
hollyp@microsoft.com
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Soon Microsoft will be in Russia interviewing interested and qualified candidates for software development positions in our SQL Server Development Group in the US at our corporate headquarters. If you are interested, or know someone who is interested, please have them send their resume/cv to russiacv@microsoft.com today!!!
WHATEVER YOU DO, DO IT AT MICROSOFT
We live in the information age - timely, secure and insightful access to information is increasingly more crucial to the lives of both individuals and organizations. The SQL Server team is charged with defining and building the next-generation Microsoft Data Platform that delivers on the vision of ubiquitous access to your data, anyplace, anytime. And oh, by the way, did we mention we are a $2.3 Billion business growing at over 25% Year over Year and rapidly gaining share in the market?
You think SQL Server is just a plain old database? Think again. The world is in the midst of a tremendous explosion in data - documents, email, line-of-business data, GPS data, RFID data, sensor data, video and satellite imagery - peta-bytes of data are being generated and much of it needs to be managed, secured, searched, synchronized, analyzed and archived. SQL Server is in the midst of a fundamental transition from a database to a complete data platform, one that can store all types of data, on all tiers - from the device to the server, from the browser to the cloud - and provides rich services over all this data. If you want to debate the merits of Postel's law and Web 2.0 application architectures, rub shoulders with Technical Fellows and Distinguished Engineers, build cool software that runs on the smallest of devices or powers the largest of mega-services, and be a part of the division the driving the data and storage vision for the company and for the World, then the SQL Server team is the right team for you.
PRODUCT DEVELOPMENT FULL-TIME POSITIONS
Software Development Engineer - Writes product code and solves complex problems. Proficient in C/C++. "You come in every morning and check up on what you've built the night before, see if you've broken anything, or if you've got any bugs to take care of. Right now I'm working on three different design features, so I've got maybe three status meetings a week to check in with everybody--the testers, the developers, the Program Managers, and together we figure out what we need to do. The core of my job is designing new features and figuring out how to get them to work. I loved that you could pursue an idea seriously in college and have other people around to talk to about it. I wanted to stay in a place like that. And Microsoft turned out to be that place."
Qualifications: A BA/BS or a graduate degree in computer science or related technical discipline. Strong coding skills, proficiency in C/C++; vision, and a passion for technical excellence.
Software Development Engineer in Test - Creates tools to test and improve products. Proficient in C/C++/C#. So what exactly is it? A Software Design Engineer in Test is a developer who designs, develops, and maintains automation systems-often expandable suites containing multiple automation programs-to be used by the development and test teams. They are responsible for utilizing innovative test technologies to develop a product's testing strategy, and for facilitating the creation and execution of automated test suites across a diverse set of technologies. They look at source code for potential problems using Microsoft internal tools. They also reproduce, debug, and isolate problems, and verify fixes.
Qualifications: A BA/BS or graduate degree in computer science, electrical engineering or related technical discipline. Strong coding skills, proficiency in C/C++/C#, Visual Basic experience, and a relentless attention to detail. There are multiple positions open, so please share the information with someone as good as you are. All positions are at our corporate headquarters in Redmond, Washington, USA. We do require functional level English language skills, written and spoken.
Holly S. Peterson - International Talent Scout - Microsoft Corporation - hollyp@microsoft.com