2017-07-15 13 views
1

React Office UI Fabricを使用してSPFX WebPartを構築しようとしています。私はAssignedToと呼ばれるPeopleフィールドを持つSharePointリストを持っています。 ID値は12,20などのようになります。 PeoplePickerで人を選択すると、AccountNameは、GUIDはff53b41e-d11a-435c-9cd1-d708e71ee7c7になります。SPFxリスト内のpeopleフィールドを設定する方法。 AccountNameを参照IDに「変換」しますか?

PeoplePickerの情報をIDに「変換する」方法は、リストのPeopleフィールドが使用していますか?

次のようにPeoplePickerが人々を取得し、次のよう

private searchPeople(terms: string, results: IPersonaProps[]): IPersonaProps[] | Promise<IPersonaProps[]> { 
    return new Promise<IPersonaProps[]>((resolve, reject) => 
    this.props.spHttpClient.get(`${this.props.siteUrl}/_api/search/query?querytext='*${terms}*'&rowlimit=20&sourceid='b09a7990-05ea-4af9-81ef-edfab16c4e31'`, 
    SPHttpClient.configurations.v1, 
    { 
     headers: { 
     'Accept': 'application/json;odata=nometadata', 
     'odata-version': '' 
     } 
    }) 
    .then((response: SPHttpClientResponse): Promise<{ PrimaryQueryResult: IPeopleDataResult }> => { 
     return response.json(); 
    }) 
    .then((response: { PrimaryQueryResult: IPeopleDataResult }): void => { 
     let relevantResults: any = response.PrimaryQueryResult.RelevantResults; 
     let resultCount: number = relevantResults.TotalRows; 
     let people = []; 
     if (resultCount > 0) { 
     relevantResults.Table.Rows.forEach((row) => { 
      let persona: IPersonaProps = {}; 
      row.Cells.forEach((cell) => { 

      if (cell.Key === 'PictureURL') 
      { 
       persona.imageUrl = cell.Value; 
      } 
      else if (cell.Key === 'PreferredName') 
      {     
       persona.primaryText = cell.Value; 
       persona.imageInitials = cell.Value.charAt(0) + (cell.Value.lastIndexOf(" ") > 0 ? cell.Value.charAt(cell.Value.lastIndexOf(" ") + 1) : ""); 
      } 
      else if (cell.Key === 'AccountName') 
      {     
       persona.itemID = cell.Value; // e.g.: "i:0#.f|membership|[email protected]" 
      } 
      else if (cell.Key === 'UserProfile_GUID') 
      {     
       persona.itemID = cell.Value; // e.g.: "ff53b41e-d11a-435c-9cd1-d708e71ee7c7" 
      } 
      }); 
      people.push(persona); 
     }); 
     } 
     resolve(people); 
    }, (error: any): void => { 
     reject(this._peopleList = []); 
    })); 
} 

は私がリストアイテムを取得:

private _getItems(requester: SPHttpClient): Promise<IInteractionLogItem[]> { 
    const queryString: string = `?$select=Id,Title,Client/Id,Client/Title,Client/EMail,Client/MobilePhone,` + 
    `$expand=Client`; 
const queryUrl: string = this._listItemsUrl + queryString; 

return requester.get(queryUrl, SPHttpClient.configurations.v1) 
    .then((response: SPHttpClientResponse) => { 
    return response.json(); 
    }) 
    .then((json: { value: IInteractionLogItem[] }) => { 
    return json.value.map((interactionLog: IInteractionLogItem) => { 
     const returnItem: IInteractionLogItem = 
     { 
     Id: interactionLog.Id, 
     Title: interactionLog.Title, 
     Client: interactionLog.Client, 
     }; 

     returnItem.CreatedBy.Picture = this._getPictureUrl(returnItem.CreatedBy.EMail); 

     if(returnItem.Client) 
     { 
     returnItem.Client.Picture = this._getPictureUrl(returnItem.Client.EMail); 
     } 

     return returnItem; 
    }); 
    }); 
} 

すべてのヘルプは非常に

答えて

1

:-) api/web/ensureuserへの呼び出しを高く評価していますSPHttpClientを使用する必要があります。要求されたユーザーがSharePointサイトのuserinfoに確実に読み込まれます。指定されたAccountNamei:0#.f|membership|[email protected])をパラメータとして検索から使用します。返されたSPUserには、Lookup列のIdフィールドが含まれています。

public EnsureUser(userName: string): Promise<ISPUser> { 
    console.log("SharePointDataProvider.EnsureUser(\"" + userName + "\")"); 
    var data = {logonName: userName}; 

    return this._webPartContext.spHttpClient.post(
    this._ensureUserUrl, 
    SPHttpClient.configurations.v1, 
    { body: JSON.stringify(data) }).then(
     (value: SPHttpClientResponse) => { 
     console.log("SharePointDataProvider.EnsureUser FullFill: statusText:\"" + value.statusText + "\""); 
     return value.json(); 
     }, 
     (error: any) => console.log("SharePointDataProvider.EnsureUser Rejected: " + error) 
    ).then((json: ISPUser) => { 
     console.log("SharePointDataProvider.EnsureUser FullFill: Id:" + json.Id +" LoginName:\"" + json.LoginName + "\""); 
     return json; 
    }); 
} 

私のミニISPUserインタフェース:

interface ISPUser 
{ 
    Email: string; 
    Id: number; 
    LoginName: string; 
    Title: string; 
} 
私は、次のメソッドを実装しました
関連する問題