Thursday, April 18, 2013

Workflow Can Use App Permissions Feature and Publish Workflow

When trying to enable "Workflow Can Use App Permissions" under Site Settings=> Manage Site Features => then trying to activate the feature, I found the following exception occurs:

Exception information: 
    Exception type: SPException 
    Exception message: We're sorry, we weren't able to complete the operation, please try again in a few minutes. If you see this message repeatedly, contact your administrator.
   at Microsoft.SharePoint.SPScaleOutDatabaseMap.CreateSqlSession(ISPScaleOutDatabaseMapProvider mapProvider, Byte[] compositeKey, Guid forceRefreshVersion, Guid& version)
   at Microsoft.SharePoint.SPScaleOutDatabaseCommandExecutor.Execute(ExecuteDelegate operation, ISPScaleOutDatabaseMapProvider mapProvider, SPSqlCommand command, Byte[] compositeKey)
   at Microsoft.SharePoint.AppManagement.AppManagementServiceApplicationProxy.PutApp(SPAppPrincipalInfo appInfo)
   at Microsoft.SharePoint.AppRegistration.AddOrUpdateAppNoPermissionCheck(SPAppPrincipalInfo appInfo)
   at Microsoft.SharePoint.SPAppPrincipalManager.RegisterWithInternalDirectory(SPAppPrincipalIdentityProvider identityProvider, String nameIdentifier, String displayName, List`1 appEndpointAuthorities, List`1 redirectAddresses, Boolean delegateAppPermissions, Boolean isInternalDirectoryApp)
   at Microsoft.SharePoint.SPAppPrincipalManager.CreateAppPrincipal(SPExternalAppPrincipalCreationParameters creationParameters)
   at Microsoft.SharePoint.WorkflowServices.SPWebWorkflowSecurityContext.EnsureAppPrincipal(SPWeb elevatedWeb)
   at Microsoft.SharePoint.WorkflowServices.SPWebWorkflowSecurityContext.<>c__DisplayClass1.b__0()
   at Microsoft.SharePoint.SPSecurity.<>c__DisplayClass5.b__3()
   at Microsoft.SharePoint.Utilities.SecurityContext.RunAsProcess(CodeToRunElevated secureCode)
   at Microsoft.SharePoint.SPSecurity.RunWithElevatedPrivileges(WaitCallback secureCode, Object param)
   at Microsoft.SharePoint.SPSecurity.RunWithElevatedPrivileges(CodeToRunElevated secureCode)
   at Microsoft.SharePoint.SPFeature.DoActivationCallout(Boolean fActivate, Boolean fForce)
   at Microsoft.SharePoint.SPFeature.Activate(SPSite siteParent, SPWeb webParent, SPFeaturePropertyCollection props, SPFeatureActivateFlags activateFlags, Boolean fForce)
   at Microsoft.SharePoint.SPFeatureCollection.AddInternal(SPFeatureDefinition featdef, Version version, SPFeaturePropertyCollection properties, SPFeatureActivateFlags activateFlags, Boolean force, Boolean fMarkOnly)
   at Microsoft.SharePoint.SPFeatureCollection.AddInternalWithName(Guid featureId, Int32 compatibilityLevel, String featureName, Version version, SPFeaturePropertyCollection properties, SPFeatureActivateFlags activateFlags, Boolean force, Boolean fMarkOnly, SPFeatureDefinitionScope featdefScope)
   at Microsoft.SharePoint.WebControls.FeatureActivator.ActivateFeature(Guid featid, Int32 compatibilityLevel, SPFeatureDefinitionScope featdefScope)
   at Microsoft.SharePoint.WebControls.FeatureActivatorItem.ToggleFeatureActivation()
   at System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument)
   at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)


Also, Same exception appeared while trying to publish SharePoint 2013 Workflow. I tried to find a related events in the Event Viewer and I found a lot of exceptions related to "App Management Service" service application in SharePoint and I found most of exceptions was related the SQL login fail to the backend database. So, in that case, All you need is to check user permission to the database. Or simply delete the current App Management Service from central administration by going to Application Management, under Service Application click on Manage Service Application. In the page click on App Management Service then click delete from the ribbon. Then, you can go to the configuration wizard again at the left of the central administration and start the configuration again.

Please refer to http://technet.microsoft.com/en-us/library/fp161236.aspx

Also, Please be cautious at the live environment, the above steps are tested at the development environment.

Cannot Publish SharePoint 2013 Workflow using SharePoint Designer

When trying to publish SharePoint 2013 Workflow using SharePoint designer 2013, sometimes the following exception appears:

Microsoft.Workflow.Client.ActivityValidationException: Workflow XAML failed validation due to the following errors:
Cannot set unknown member 'CompositeTask.RelatedContentLinkListItemIntegerId'. HTTP headers received from the server - ActivityId: 15459ce7-8e0d-4267-aa59-cc724289e422. NodeId: TECSRVSOL02. Scope: /SharePoint/default/c8ca3a4c-bb1a-4056-b675-597fa0348916/0d4731cd-bfe2-47b6-acd2-6caa6bd45931

I tried so hard to find a solution for this until I found this post (http://sp2013-blog.com/2013/04/solution-errors-were-found-when-compiling-the-workflow-the-workflow-files-were-saved-but-cannot-be-run-cannot-set-unknown-member/) Michael and the following Post by Tarek Yehia (http://sharepointserver-2007.blogspot.ae/2013/04/sharepoint-designer-error-while.html).

Basically, The solution was to register Workflow service again using SharePoint 2013 Power Shell.

Register-SPWorkflowService -SPSite 'https://myhost/mysite' -WorkflowHostUri 'https://workflowhost' -AllowOAuthHttp -Force

Sunday, April 7, 2013

SharePoint 2013 Workflows (Loops and State Machine)

Finally, SharePoint 2013 supports a state machine workflow. It is not mandatory to be sequential. Also, It supports loops now, so you can create loop without the guilty feeling of the workaround developers were doing in old SharePoint servers. Good Job.
In the image below, you can add go to another stage in the "transition to stage" scope. You have to configure Workflow Manager 1.0 and register the workflow service to the SharePoint 2013 Server. If you need more help about that, Kindly refer to http://technet.microsoft.com/en-us/library/jj658588.aspx


SharePoint 2013 Workflow Designer

Sunday, February 3, 2013

SharePoint 2013 Open Site Issue

After installing SharePoint Designer 2013 and after clicking on "Open Site" button, SharePoint designer 2013 crashes. This issue occurs only if you have both SharePoint designer 2010 and 2013 installed (Side by Side installation). To resolve this issue, Check this post by "Bradley Geldenhuys":

http://www.gtconsult.co.za/blog/Lists/Posts/Post.aspx?ID=8

Thank you Bradley :)

Thursday, December 2, 2010

Sharepoint 2010 Javascript error when adding or editing items in a list using popups

I have discovered a weird problem in Sharepoint 2010 and many of developers have discovered that too. To reproduce the problem follow the following steps:

1. Create new list of any type (Calendar, custom,...etc).
2. browse the list.
3. Click on Add new Item.
4. In the pop up, click on maximize before the page finishes loading (once the maximize button appear). (A).
5. once maximized or once the pop up appears, click on close to close the pop up dialog. (B)

Expected:
for A: the pop up should be maximized.
for B: the pop up should be closed and returns to the list view.

Actual:
For A: Invalid Argument javascript error occurs in SP.UI.RTE.js.
For B: Invalid Argument javascript error occurs in SP.UI.Dialog.js.

I have tried the above scenarios in multiple servers and i can reproduce the the error in all cases. i have tried to resolve the problem but i cannot find any straightforward one. However, i discovered that after the javascript errors appear, the pop up behaves normally so, i decided to try handling that error by writing a custom javascript to handle the error. After that, the javascript errors disappeared and everything is now working very well.

To handle that error, just write a custom javascript function to handle the error using the following code:

//START DIRTY WORKAROUND TO HANDLE THE JS ERROR WHEN CLICKING ADD NEW ITEM OR EDIT AND MAXIMIZE BEFORE WINDOW FINISHS LOADING
//ALSO HANDLES WHEN CLOSING THE POPUP BEFORE FINISHING, IT GIVES JS ERROR.
function noErrorMessages(err, url) {
    // HANDLE MAX THE POPUP ERROR
    if (err.search(/invalid argument/gi) >= 0 && url.search(/sp.ui.rte/gi) >= 0) {
        return true;
    }
    // HANDLES CLOSING THE POPUP
    else if (err.search(/or not an object/gi) >= 0 && url.search(/sp.ui.dialog/gi) >= 0) {
        return true;
    }
    return false;

}
window.onerror = noErrorMessages;

//END DIRTY WORKAROUND

The above javascript code hides the above errors only and behaves normally for the other javascript errors. (use browser default behavior). By adding the above javascript code to the master page or to the page that shows the adding new item or editing existing item, the javascript errors will disappear and everything will behave normally.

Tuesday, September 7, 2010

Configuring WCF for Multi Addresses

If you have a web site that has two address, for example: http://IP:PORT/ and http://www.YourSiteHere.com, and if you have a WCF that you need it to work in both URLs, then the configuration of the WCF will be different in that case. To achieve that add the following elements under system.ServiceModel

<serviceHostingEnvironment aspNetCompatibilityEnabled="true">
<baseAddressPrefixFilters>
<add prefix="http://www.YourSiteHere.com"/>
</baseAddressPrefixFilters>
</serviceHostingEnvironment>