MS Project 2010 PSI : 프로젝트를로드하지 않고 사용자 정의 필드 값을 가져 오는 방법이 있습니까?

StackOverflow https://stackoverflow.com/questions/4972433

  •  12-11-2019
  •  | 
  •  

문제

사용자 정의 필드 값으로 특정 프로젝트를 찾으려고합니다.지금까지 이것은 내가하는 가장 좋은 방법입니다 :

var targetProjectId = "some_external_reference_ID";
var projIdCustomFieldUid = GetCustomFieldUidByName("ExternalProjectId");
var projectList = base.ProjectClient.ReadProjectList();

foreach (ProjectDataSet.ProjectRow projRow in projectList.Project.Rows)
{
    var fullProj = base.ProjectClient.ReadProject(projRow.PROJ_UID, DataStoreEnum.WorkingStore);
        if (fullProj != null)
        {
            var cf = fullProj.ProjectCustomFields.Where(x => x.MD_PROP_UID == projIdCustomFieldUid && x.TEXT_VALUE == targetProjectId ).FirstOrDefault();
            if (cf != null)
            {
                return fullProj;
            }
        }
    }
    return null;
}
.

상상할 수 있듯이 모든 프로젝트를 반복하고 사용자 정의 필드 값을 확인하기 위해 각각을로드하는 것에 따라 끔찍하고 추악합니다.가능한 한 사용자 정의 필드 값으로 ProJ_UID를 식별해야하므로 다음과 같이하십시오. 따라서 다음과 같이하십시오.

전체 프로젝트를로드하지 않고 사용자 정의 필드 값에서 얻을 수있는 방법이 있습니까?

도움이 되었습니까?

해결책

게시 된 프로젝트 만 필요한 경우 ProjectServer_Reporting 데이터베이스에서 SQL 쿼리를 사용합니다. 아마도 MSP_EPMPROJECT_USERVIEW보기입니다.이보기에는 대부분의 사용자 정의 필드 유형의 열이 포함됩니다.

SELECT
  ProjectUid
  ,ProjectName
FROM
  MSP_EPMProject_UserView mepuv
WHERE
  mepuv.[My Custom Field] = 'the value I care about'
.

PSI를 통해이 문제를 해결 해야하는 경우 IIRC, 필터링 된 쿼리가 필요한 프로젝트 만 수행하기 위해 문제가 발생할 수 있지만 내 앞에 구문이 없습니다.SQL 메소드 대신 PSI를 정말로 사용하고자하는 경우 알려 주시면이를 찾을 것입니다.

희망이 도움이 ... 제임스 프레이저

다른 팁

PSI의 2007 버전을 사용 하여이 문제를 해결했습니다.우리는 모든 사용자 정의 메타 데이터 속성을 SharePoint 목록으로 동기화하기로 결정했습니다.이렇게하면 쿼리하고 섭취하는 것이 매우 쉽습니다.그러나 동기화는 유지하기위한 약간의 작업입니다.

나는 대안이보고 데이터베이스를 쿼리하는 것이 아니라, 이것을 위해 좋은 정보를 찾을 수 없었습니다.

사용자 정의 필드를로드하려면 전체 프로젝트를로드하는 것은이 readprojectentities (..., 32, ...)와 같은 readprojectentities를 사용할 수 있습니다. 여기서 32는 사용자 정의 엔티티 를 식별합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top