| serge's profileSerge Luca (Sharepoint M...PhotosBlogLists | Help |
|
August 31 Calling Sharepoint Dlls from C++ code
I spent most of the nineties in the C++ world with the venerable MFC (Microsoft Foundation Classes) , ATL(Active Template Library) & its famous smart pointers. I recently had to answer a question in the Sharepoint newsgroups related to using Sharepoint dlls in C++: I jumped on it as a kid in a candy store (to be honest my current candy store is Sharepoint 2010). This is what I did: Create a new CLR Console Application project :
The following code is generated :
Add a reference to the Microsoft.Sharepoint.dll :
Define the Microsoft.Sharepoint namespace:
Write your C++; since Sharepoint classes are managed classes, you have to use the new gcnew operator and you don’t have to call delete. Run the application :
Don’t forget, Visual C++ is the only compiler that allows you to mix-up managed and native code (we call that IJW or “It just works”); and this without the overhead of the PInvoke layer. This is quite simple, but it’s not your grandma’s C++ compiler anymore. August 24 Sharepoint workflows : when are your tasks created ?Several Sharepointers notice that using the CreateTask activity alone in a Sharepoint workflow doesn’t really create a Sharepoint Task: To have the task created (in the task list) you need to have an activity that will move the workflow in waiting state ; any activity implementing the IEventActivity interface will do the job; that is the case of all sharepoint activities having name starting with “On” (OnTaskCreated, OnTaskChanged,OnTaskDeleted,…), and also the Delay activity. The Sharepoint activities modifying the Sharepoint content database are enrolled in a transaction which is committed when the workflow persists.
The following setting in the web.config file specifies the Transaction timeout duration:
<configuration> <system.transactions> <defaultSettings timeout="00:05:00"/> </system.transactions> </configuration> By default the value is set to 1 minute. You can increase the value to 5 minutes if you face the following error, which can happen if yoy create several hundreds of tasks :
Workflow Infrastructure 72fg High Error in persisting workflow: System.Transactions.TransactionAbortedException: The transaction has aborted. ---> System.TimeoutException: Transaction Timeout --- End of inner exception stack trace --- at System.Transactions.TransactionStateAborted.CreateAbortingClone(InternalTransaction tx). August 20 Step by Step Tutorial.Creating workflows with Windows Sharepoint Services and MOSS 2007(Part 17/20). Solving the infamous “Failed On Start (Retrying)”
Spending a lot a time (anwering) in the Sharepoint newsgroups, I've noticed the "Failed On Start" error is an extremely frequent question.This post will probably help many people. When we start a (Custom) Sharepoint Workflow (but even sometimes Out of the Box workflows) the infamous Failed on start (retrying) error may hit you.The most common reasons of this error are: 1. in most cases the main reason is that the CodeBesideclass and the CodeBeside assembly in workflow.xml don't match the workflow class name & assembly strong name of the dll registered in the GAC ("Unexpected Load Workflow Assembly: System.IO.FileNotFoundException: Could not load file or assembly xxxx") is what you will find in the Sharepoint log. User Reflector the compare your assemblies strong name/class name & don't forget the namespace!
To prevent web front ends (w3wp) from getting overrun by running too many workflows instances, there is a throttle limit. If more events than the throttle are already being processed, the newer events are enqueued as work items – they will be picked up by OWSTimer. If your workflows don’t start immediately as expected you probably have to increase this throttle limit stsadm -o setproperty -pn workflow-eventdelivery-throttle -pv "20" (the default value is 15). By Code : SPWebApplication myWebApps = SPWebApplication.Lookup(new Uri(websiteUrl)); It looks like in some situations” a Failed On Start” may be triggered and can be solved by increasing this value. In some cases, I’ve noticed that increasing this value may solve a “Failed On Start” which indeed is very strange : when the W3P.exe is overrun, all actions (including event deliveries) are supposed the be enqueued (and thus executed later) but the OWSTIME.exe service. Windows SharePoint Services Workflow Infrastructure 936r Verbose RunWorkflow: No pending events - possibly targeted for async delivery
3.the transaction timeout value is too low can also generate a Failed on Start, specially when a lot of task (several hundreds) are created by the workflow which try to store the in a SQL Server transaction. the information you will find in the Sharepoint log file is soething like this Workflow Infrastructure 72fg High Error in persisting workflow: System.Transactions.TransactionAbortedException: The transaction has aborted. ---> System.TimeoutException: Transaction Timeout --- End of inner exception stack trace --- at System.Transactions.TransactionStateAborted.CreateAbortingClone(InternalTransaction tx). One possible workaround is to increase the timeout value in the web.config file. By default the value is set to 1 minute. You can increase the value to 5 minutes for instance :
<configuration> <system.transactions> <defaultSettings timeout="00:05:00"/> </system.transactions> </configuration>
4.repair of the .NET 3.0/.Net 3.5 Framework may be necessary. If you have SP1 for the .NET Framework installed, just go into the Control Panel/Add Remove Programs and click the Change button on Microsoft .NET Framework 3.0 SP1. If you don't have the Service Pack you can install it. The Change process takes about 2 minutes. 5.A more exotic one : Workflow Foundation performance counters not loaded Reload them again: Lodctr "c:\Windows\Microsoft.Net\Framework\v3.0\Windows Workflow Foundation\perfcounters.ini" August 19 Step by Step Tutorial.Creating workflows with Windows Sharepoint Services and MOSS 2007(Part 16/20). Assign a workflow task to a group of users
Introduction A very good practice in software is to work with roles instead of working with individuals. I’ve often noticed in the Sharepoint newsgroups that assigning a workflow task to a group seems to be a popular question. First off you cannot assign a Task to Active Directory groups, but only to Sharepoint groups !
Hands-on
Congratulations ! |
|
|