Tuesday, November 21, 2017

REST Query



Author/Title&$expand=Author/Id


https://mydomain.sharepoint.com/mysite/_api/web/lists/GetByTitle('MyList')/items?$filter=Column1 eq 1 AND Column2 eq 2 AND Column3 eq 3

SharePoint Crawl Errors and Resolution

ERROR No. 01
Failed to retrieve data from the External System: 'MethodInstance with Name 'AttachmentStream' on Entity (External Content Type) with Name 'SFDCArticle_CEntity' in Namespace '.BCS.Connector.SFDCArticle_C' failed unexpectedly. The failure occurred in method 'GetAttachments' defined in class 'SFDCArticle_CService' with the message 'Sequence contains no elements'.

Solution:-

When you get the LINQ Error "Sequence contains no elements", this is usually because you are using the First() or Single() command rather than FirstOrDefault() and SingleOrDefault().
https://stackoverflow.com/questions/1324199/sequence-contains-no-elements

ERROR No. 02
Failed to retrieve data from the External System: 'MethodInstance with Name 'ReadItem' on Entity (External Content Type) with Name 'SFDCArticle_CEntity' in Namespace '.BCS.Connector.SFDCArticle_C' failed unexpectedly. The failure occurred in method 'ReadItem' defined in class '.BCS.Connector.SFDCArticle_C.SFDCArticle_CService' with the message 'Object reference not set to an instance of an object.'.'

Solution:-
Empty File OR Recrawl

ERROR No. 03


Tuesday, October 24, 2017

How to create managed property using powershell in sharepoint admin

$searchapp = Get-SPEnterpriseSearchServiceApplication -Identity c7276513-625d-4921-a2df-09c02c6007e2
$category = Get-SPEnterpriseSearchMetadataCategory –Identity SharePoint -SearchApplication $searchapp
$crawledproperty = New-SPEnterpriseSearchMetadataCrawledProperty -SearchApplication $searchapp -Category $category -VariantType 0 -PropSet "00130329-0000-0130-c000-000000131346" -Name "FAST_DBFIND_CCR.FAMILY_ID" -IsNameEnum $false
$managedproperty = New-SPEnterpriseSearchMetadataManagedProperty -SearchApplication $searchapp -Name "FAMILYID" -Type 3 -FullTextQueriable $true -Queryable $true -Retrievable $true -SafeForAnonymous $true
New-SPEnterpriseSearchMetadataMapping -SearchApplication $searchapp -ManagedProperty $managedproperty -CrawledProperty $crawledproperty



PS C:\Users\SPDevServer> $managedproperty = New-SPEnterpriseSearchMetadataManage
dProperty -SearchApplication $searchapp -Name ACCOUNTNAME -Type 1 -FullTextQueri
able $true -Queryable $true -Retrievable $true -SafeForAnonymous $true
New-SPEnterpriseSearchMetadataManagedProperty : A managed property of the same
name ("ACCOUNTNAME") already exists.
At line:1 char:20
+ $managedproperty = New-SPEnterpriseSearchMetadataManagedProperty
-SearchApplicat ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~
    + CategoryInfo          : InvalidData: (Microsoft.Offic...ManagedProperty:
   NewSearchMetadataManagedProperty) [New-SPEnterpris...ManagedProperty], Inv
  alidNameException
    + FullyQualifiedErrorId : Microsoft.Office.Server.Search.Cmdlet.NewSearchM
   etadataManagedProperty

PS C:\Users\SPDevServer> New-SPEnterpriseSearchMetadataMapping -SearchApplicatio
n $searchapp -ManagedProperty $managedproperty -CrawledProperty $crawledproperty

New-SPEnterpriseSearchMetadataMapping : Cannot bind argument to parameter
'ManagedProperty' because it is null.
At line:1 char:86
+ ... anagedProperty $managedproperty -CrawledProperty $crawledproperty
+                    ~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidData: (:) [New-SPEnterpriseSearchMetadata
   Mapping], ParameterBindingValidationException
    + FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,M
   icrosoft.Office.Server.Search.Cmdlet.NewSearchMetadataMapping

PS C:\Users\SPDevServer> $managedproperty = New-SPEnterpriseSearchMetadataManage
dProperty -SearchApplication $searchapp -Name "COMPANYNAME" -Type 1 -FullTextQue
riable $true -Queryable $true -Retrievable $true -SafeForAnonymous $true
PS C:\Users\SPDevServer> New-SPEnterpriseSearchMetadataMapping -SearchApplicatio
n $searchapp -ManagedProperty $managedproperty -CrawledProperty $crawledproperty



CrawledPropset             : 00130329-0000-0130-c000-000000131346
CrawledPropertyName        : FAST_DBFIND_CCR.ACCOUNTNAME
CrawledPropertyVariantType : 0
ManagedPid                 : 1002



PS C:\Users\SPDevServer> $managedproperty = New-SPEnterpriseSearchMetadataManage
dProperty -SearchApplication $searchapp -Name "CREATEDATE" -Type 1 -FullTextQuer
iable $true -Queryable $true -Retrievable $true -SafeForAnonymous $true
PS C:\Users\SPDevServer> New-SPEnterpriseSearchMetadataMapping -SearchApplicatio
n $searchapp -ManagedProperty $managedproperty -CrawledProperty $crawledproperty



CrawledPropset             : 00130329-0000-0130-c000-000000131346
CrawledPropertyName        : FAST_DBFIND_CCR.ACCOUNTNAME
CrawledPropertyVariantType : 0
ManagedPid                 : 1003



PS C:\Users\SPDevServer> $managedproperty = New-SPEnterpriseSearchMetadataManage
dProperty -SearchApplication $searchapp -Name "DBID" -Type 3 -FullTextQueriable
$true -Queryable $true -Retrievable $true -SafeForAnonymous $true
PS C:\Users\SPDevServer> New-SPEnterpriseSearchMetadataMapping -SearchApplicatio
n $searchapp -ManagedProperty $managedproperty -CrawledProperty $crawledproperty



CrawledPropset             : 00130329-0000-0130-c000-000000131346
CrawledPropertyName        : FAST_DBFIND_CCR.ACCOUNTNAME
CrawledPropertyVariantType : 0
ManagedPid                 : 1004



PS C:\Users\SPDevServer> $managedproperty = New-SPEnterpriseSearchMetadataManage
dProperty -SearchApplication $searchapp -Name "DOCENGINEER" -Type 3 -FullTextQue
riable $true -Queryable $true -Retrievable $true -SafeForAnonymous $true
PS C:\Users\SPDevServer> New-SPEnterpriseSearchMetadataMapping -SearchApplicatio
n $searchapp -ManagedProperty $managedproperty -CrawledProperty $crawledproperty



CrawledPropset             : 00130329-0000-0130-c000-000000131346
CrawledPropertyName        : FAST_DBFIND_CCR.ACCOUNTNAME
CrawledPropertyVariantType : 0
ManagedPid                 : 1005



PS C:\Users\SPDevServer> $managedproperty = New-SPEnterpriseSearchMetadataManage
dProperty -SearchApplication $searchapp -Name "ENGINEER" -Type 3 -FullTextQueria
ble $true -Queryable $true -Retrievable $true -SafeForAnonymous $true
PS C:\Users\SPDevServer> New-SPEnterpriseSearchMetadataMapping -SearchApplicatio
n $searchapp -ManagedProperty $managedproperty -CrawledProperty $crawledproperty



CrawledPropset             : 00130329-0000-0130-c000-000000131346
CrawledPropertyName        : FAST_DBFIND_CCR.ACCOUNTNAME
CrawledPropertyVariantType : 0
ManagedPid                 : 1006



PS C:\Users\SPDevServer> $managedproperty = New-SPEnterpriseSearchMetadataManage
dProperty -SearchApplication $searchapp -Name "FAMILYID" -Type 3 -FullTextQueria
ble $true -Queryable $true -Retrievable $true -SafeForAnonymous $true
PS C:\Users\SPDevServer> New-SPEnterpriseSearchMetadataMapping -SearchApplicatio
n $searchapp -ManagedProperty $managedproperty -CrawledProperty $crawledproperty



CrawledPropset             : 00130329-0000-0130-c000-000000131346
CrawledPropertyName        : FAST_DBFIND_CCR.ACCOUNTNAME
CrawledPropertyVariantType : 0
ManagedPid                 : 1007



PS C:\Users\SPDevServer>

Thursday, July 20, 2017

SHARE Document WITH EXTERNAL USERS – SharePoint Online


Need to deactivate below feature to check-out and check-in

Limited-access user permission lockdown mode


When this feature is enabled, permissions for users in the "limited access" permissions level (such as Anonymous Users) are reduced, preventing access to Application Pages.


TO Send emails to distribution lists (DLs) using SharePoint - we Should enable security group

Issue : Library Contribute
When a document contributed to an email should be sent t

Solution : - we have already providing  in CC, but our SharePoint Utilities Send Email not resolving as it is shared mailboxes or distribution lists (DL).

Please follow below steps in order to send emails to a DL from SharePoint, the DL needs to be converted to a security group that is email enabled.

1.     Go to Exchange Management Console -> Recipient Configuration -> Distribution group.
2.     Right-click on the problem group (i.e. the DL or the security group) and choose properties.
3.     On the Mail Flow Settings tab, double click on Message Delivery Restrictions.
4.     Uncheck the check box “Require that all senders are authenticated”.


Once done, the DL’s id can easily be searched in SharePoint’s directory and emails can be sent to

Friday, February 17, 2017

Dynamic SiteURL & RestURL call with X-RequestDigest Sharepoint


siteUrl = _spPageContextInfo.webAbsoluteUrl;

var restUrlnew = siteUrl + "/_api/web/lists/getbytitle('" + priviewList + "')/items(" + itemid+ ")?$select=Downloads";
            $.ajax({
                url: restUrlnew,
                method: "GET",
       headers: { "Accept": "application/json; odata=verbose",
       "X-RequestDigest": jQuery("#__REQUESTDIGEST").val()
        },                
                async: false,
                success: function (data) {

Change DATE Format DDMMYYYY OR MMDDYY


Function to get DD MM YYYY  OR MMDDYY


function formattedDate(date) {
    var d = new Date(date || Date.now()),
        month = '' + (d.getMonth() + 1),
        day = '' + d.getDate(),
   year = d.getFullYear();
   if (month.length < 2) month = '0' + month;
   if (day.length < 2) day = '0' + day;
   return [day,month,year].join('/');
}

Updating Sp list onclick of download or Open button

On click of download and Open button in document preview



//onClick of open button
        $('.preview-template').on('click', '.open-test', function (ev) {
            //ev.preventDefault();          
            updateToDownloadDetails();
            //window.location.href=serviceURL;        
        });

        //ONCLICK OF download
        $('.preview-template').on('click', '.download-test', function (ev) {
            //ev.preventDefault();
            updateToDownloadDetails();
        });
       

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

function updateToDownloadDetails() {
    try {
        var DownloadDate = new Date();
        var DownloadBy = CurrentUserID;
        DownloadCount = 1;
        var itemID = rowID;
        var listItem = ["Title", downloadURL, DownloadDate, DownloadBy, DownloadCount, olistName];
        clientContext = new SP.ClientContext(siteUrl);
        oList = clientContext.get_web().get_lists().getByTitle(downloadListName);
        var itemCreateInfo = new SP.ListItemCreationInformation();
        oListItem = oList.addItem(itemCreateInfo);
        oListItem.set_item('Title', "New Title");
        oListItem.set_item('DocumentUrl', listItem[1]);
        oListItem.set_item('DownloadDate', listItem[2]);
        oListItem.set_item('DownloadBy', listItem[3]);
        oListItem.set_item('DownloadCount', listItem[4]);
        oListItem.set_item('SourceLibrary', listItem[5]);
        oListItem.update();
        clientContext.executeQueryAsync
       (
           Function.createDelegate(this, function () { onSucceededDownloadUpdates(olistName,rowID); }),
           Function.createDelegate(this, this.onSucceededDownloadUpdates(olistName,rowID))
       );  
      }
       
        catch (err) {
            console.log(err.message);
        }
        }

function onSucceededDownloadUpdates(priviewList,itemid) {
GetDownloadCount(priviewList,itemid)
    console.log('Item updated!');
}

function onFailedDownloadUpdates(sender, args) {
    console.log('Request failed. ' + args.get_message() + '\n' + args.get_stackTrace());
    return false;
}

function GetDownloadCount(olistName,itemid){
 try {
           var restUrlnew = siteUrl + "/_api/web/lists/getbytitle('" + olistName+ "')/items(" + itemid+ ")?$select=Downloads";
            $.ajax({
                url: restUrlnew,
                method: "GET",
       headers: { "Accept": "application/json; odata=verbose",
       "X-RequestDigest": jQuery("#__REQUESTDIGEST").val()
        },                
                async: false,
                success: function (data) {
                var count=data.d.Downloads;
                UpdateListData(olistName,itemid,count);
                     }, //succss function
                error: function (data) {
                    alert("error");
                }
            });
        }        
        catch (err) {
            console.log(err.message);
        }            
}

function UpdateListData(ListName,itemId,cntdownloads) {
    try{
        var oList = clientContext.get_web().get_lists().getByTitle(ListName);
        var oListItem = oList.getItemById(itemId);
        var Count;
        Count=cntdownloads+1;
        oListItem.set_item('Downloads', Count);
        oListItem.update();
        clientContext.load(oListItem);
        clientContext.executeQueryAsync
           (
               Function.createDelegate(this, function () { onQuerySucceededUpdateList(); }),
               Function.createDelegate(this, this.onQueryFailed)
           );
    }
    catch(err){
        console.log(err.message);
    }
}

function onQuerySucceededUpdateList() {
    console.log('Item updated!');
     location.reload(false);
}
---------------------




Thursday, January 12, 2017

LIST OF INTERNAL NAMES FOR SHAREPOINT FIELDS

TITLEINTERNAL NAME
Approval Status_ModerationStatus
Approver Comments_ModerationComments
Check In Comment_CheckinComment
Checked Out ToCheckoutUser
Checked Out ToCheckedOutTitle
Checked Out ToLinkCheckedOutTitle
Content TypeContentType
Content Type IDContentTypeId
Copy Source_CopySource
CreatedCreated
CreatedCreated_x0020_Date
Created ByAuthor
Document Created ByCreated_x0020_By
Document Modified ByModified_x0020_By
EditEdit
Edit Menu Table End_EditMenuTableEnd
Edit Menu Table Start_EditMenuTableStart
Effective Permissions MaskPermMask
Encoded Absolute URLEncodedAbsUrl
File SizeFile_x0020_Size
File SizeFileSizeDisplay
File TypeFile_x0020_Type
GUIDGUID
Has Copy Destinations_HasCopyDestinations
Html File Linkxd_ProgID
HTML File TypeHTML_x0020_File_x0020_Type
IDID
ID of the User who has the item Checked OutCheckedOutUserId
Instance IDInstanceID
Is Checked out to localIsCheckedoutToLocal
Is Current Version_IsCurrentVersion
Is Signedxd_Signature
Item TypeFSObjType
Level_Level
MergeCombine
ModifiedModified
ModifiedLast_x0020_Modified
Modified ByEditor
NameFileLeafRef
NameLinkFilenameNoMenu
NameLinkFilename
NameBaseName
OrderOrder
owshiddenversionowshiddenversion
PathFileDirRef
ProgIdProgId
Property BagMetaInfo
RelinkRepairDocument
ScopeIdScopeId
SelectSelectTitle
SelectSelectFilename
Server Relative URLServerUrl
Shared File Index_SharedFileIndex
Source Name (Converted Document)ParentLeafName
Source Url_SourceUrl
Source Version (Converted Document)ParentVersionString
Template LinkTemplateUrl
TitleTitle
TypeDocIcon
UI Version_UIVersion
Unique IdUniqueId
URL PathFileRef
Version_UIVersionString
Virus StatusVirusStatus
Workflow Instance IDWorkflowInstanceID
Workflow VersionWorkflowVersion
Reference
http://blog.softartisans.com/2009/12/08/list-of-internal-names-for-sharepoint-fields/

Get LookUp and Author Name Using REST API + SharePoint 2013

How to get Author/Title or Name from AuthorID = dataResults.Title

function getUser(id, tdHtml){

var returnValue;
 jQuery.ajax({
  url: "https://YourSite/_api/Web/GetUserById(" + id + ")",
  type: "GET",
  headers: { "Accept": "application/json;odata=verbose" },
  success: function(data) {
         var dataResults = data.d;
      alert(dataResults.Title);
   
  }
});
}

How to get Author/Title or Name from AuthorID in one single Rest call / query


/_api/web/lists/getbytitle('KhaitanDocLib')/items?$select=Author/Title,PracticeArea/Title&$expand=Author/Id,PracticeArea


Wednesday, January 11, 2017

REST URLS to get items from DOCUMENT Library

To get MetaData details
https://gkms.sharepoint.com/sites/Khaitan/_api/web/lists/getbytitle('KhaitanDocLib')/items("+rowID+")

To get Document Properties like Name and etc
https://gkms.sharepoint.com/sites/Khaitan/_api/web/lists/getbytitle('KhaitanDocLib')/items("+ItemID+")/File

Custom Document Preview on Click of Document Link in GRID ( DataTable)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<head>
    <script type="text/javascript" src="https://gkms.sharepoint.com/sites/Khaitan/SiteAssets/jquery-3.1.1.js"></script>
    <script type="text/javascript" src="https://gkms.sharepoint.com/sites/Khaitan/SiteAssets/jeditable.js"></script>
    <link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/v/dt/dt-1.10.13/datatables.min.css" />
    <script type="text/javascript" src="https://cdn.datatables.net/v/dt/dt-1.10.13/datatables.min.js"></script>

    <script type="text/javascript" src="https://gkms.sharepoint.com/sites/Khaitan/SiteAssets/jquery.SPServices-2014.02.js"></script>

    <script type="text/javascript" charset="utf-8">
       $(document).ready(function () {
            SP.SOD.executeFunc('sp.js', 'SP.ClientContext', retrieveListItems);
            ExecuteOrDelayUntilScriptLoaded(CallOut, "callout.js");
            var aHtml="";
            var rowID;        
            var siteUrl = "https://gkms.sharepoint.com/sites/Khaitan/";
            var restUrl="";
           
            function retrieveListItems() {
             // This piece of code retrieves list items from the list called "Resources"
                // you can change the name of the list in the variable 'listName'
                // Also, the fields revieved are 'ows_Title' and 'ows_Cost', you can change those too
                $().SPServices({
                    operation: "GetListItems",
                    async: false,
                    listName: "KhaitanDocLib",
                    CAMLViewFields: "<ViewFields><FieldRef Name='Title' /><FieldRef Name='EncodedAbsUrl'/></ViewFields>",
                    completefunc: function (xData, Status) {
                        //alert(xData.responseText);
                        $(xData.responseXML).SPFilterNode("z:row").each(function () {
                            var aHtml = "<a href=" + $(this).attr("ows_EncodedAbsUrl") + ">" + $(this).attr("ows_Title") + "</a>";
                            var tdHtml = "<tr class='gradeX' id='" + $(this).attr("ows_ID") + "'> <td class='DocLinkID'>" + aHtml + "</td>";
                            tdHtml += "<td class='two'>" + $(this).attr("ows_PracticeArea") + "</td>";
                            $(".tablebodyresources").append(tdHtml);
                        });
                    }
                });

                // the table is constructed dynamically where results are going to be placed
                var nCloneTh = document.createElement('th');
                var nCloneTd = document.createElement('td');
                nCloneTd.innerHTML = '<img class="editRowIMG" src="https://gkms.sharepoint.com/sites/Khaitan/Style Library/details_open.png" height="25" width="25"  alt="EDIT"><img class="delItemImg" src="https://gkms.sharepoint.com/sites/Khaitan/Style Library/Delete.png" height="25" width="25" alt="Delete">';
                nCloneTh.innerHTML = 'Actions';
                nCloneTd.className = "center";
                // this is an 'Add' image  inserted in front of each row
                $('#resourcepool thead tr').each(function () {
                    //this.insertBefore( nCloneTh, .childNodes[0]);
                    $(this).append(nCloneTh);
                });

                $('#resourcepool tbody tr.gradeX').append(nCloneTd);
                var resourceTable = $('#resourcepool').dataTable();
                //this is an event handler to handle users clicking on the 'Add' image in front of each row
               
                $('#resourcepool').on( 'click', 'tbody tr .DocLinkID', function () {
                    rowID=this.parentElement.id;
//alert(rowID);
restUrl = "https://gkms.sharepoint.com/sites/Khaitan/_api/web/lists/getbytitle('KhaitanDocLib')/items("+rowID+")";
$.ajax({
                    url: restUrl,
                    method: "GET",                  
                    headers: { "Accept": "application/json; odata=verbose" },
                    success: function (data) {
                    var metaDataCols ="";
                    $("#metadatav").html(metaDataCols);
                      alert("success");
                        $("#frame").attr("src", data.d.ServerRedirectedEmbedUrl);
                        metaDataCols="<table><tr><td>Practice Area:</td><td>"+data.d.PracticeArea+"</td><td>Sub Practice Area:</td><td>"+data.d.SubPracticeArea+"</td></tr>";
                        metaDataCols +="<tr><td>Comments</td><td>"+data.d.Comments+"</td></tr><table>";
                        $("#metadatav").append(metaDataCols);
                        $("#openDocID").attr("href", data.d.ServerRedirectedEmbedUrl);
                        GetDocNameLinkURL();
                                       
                    },
                    error: function (data) {
                        alert("error");
                    }  
                });//onclick of row            

});
               
            }//retrieve item method
         
function GetDocNameLinkURL(){
restUrl="https://gkms.sharepoint.com/sites/Khaitan/_api/web/lists/getbytitle('KhaitanDocLib')/items("+rowID+")/File";
   $.ajax({
    url: restUrl,
                    method: "GET",                  
                    headers: { "Accept": "application/json; odata=verbose" },
       success: function(results){
//alert(results);
var docURL = results.d.LinkingUrl.split('?');
     $("#downloadDocID").attr("href",docURL[0]);
     var arr = results.d.Name.split('.');
     $("#DocNameID").text(arr[0]);

       }
   });
}
    function myFunction(){
     alert("Document downloaded");
      }// download completes
     
        });//DOCUMENT.READY      
       
   


     </script>

    <style type="text/css">
   
        .edit-row-modal {
            display: none;
        }
       
     
    </style>

</head>
<body id="dt_example">
    <table cellpadding="0" cellspacing="0" border="0" class="display" id="resourcepool">
        <thead>
            <tr>
                <th>Name Of Document</th>
                <th>Practice Area</th>
            </tr>
        </thead>
        <tbody class="tablebodyresources"></tbody>
    </table>

  <div id="mydiv" width="100%" height="100%">
  <h1 id="DocNameID"></h1>
  <iframe Id="frame" height="440px"></iframe>
  <div id="metadatav"></div>  
<a id="openDocID"><input type="button" value="Open" ></a>
<a id="downloadDocID" onclick="myFunction()"><input type="button" value="Download" ></a>
</div>

</body>
</html>

Tuesday, January 3, 2017

Check Current user is an Admin or not

SPUser.IsSiteAdmin Property

SP.User.isSiteAdmin property (sp.js)


if(currUser.get_isSiteAdmin)
{
console.log("Current user is site Admin");
}
else{
console.log("Current user is not site Admin");
}

Update or edit status filed in JIRA issue

the status field is a special case and can't be updated directly, which is the second problem here. Changing a status in Jira is called ...