PROGETTO MS 2010 PSI: esiste un modo per ottenere valori di campo personalizzati senza caricare un progetto?

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

  •  12-11-2019
  •  | 
  •  

Domanda

Sto cercando di individuare un particolare progetto con un valore di campo personalizzato. Finora, questo è il modo migliore per farlo:

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;
}

Come puoi immaginare, il loop attraverso tutti i progetti e il caricamento di ciascuno per controllare il valore del campo personalizzato è orribilmente lento e brutto. Devo identificare un proj_uid per valore del campo personalizzato il più velocemente possibile, quindi:

C'è un modo per ottenere valori di campo personalizzati senza caricare un intero progetto?

È stato utile?

Soluzione

Se hai solo bisogno di progetti pubblicati, utilizzerei una query SQL sul database Progerserver_Reporting, probabilmente la vista MSP_EPMProject_Userview. Questa vista include colonne per la maggior parte dei tipi di campi personalizzati.

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

Se hai davvero bisogno di chiamarlo tramite PSI, allora IIRC, c'è una query filtrata che puoi emettere per ottenere solo i progetti di cui hai bisogno, ma non ho la sintassi di fronte a me. Fammi sapere se vuoi davvero usare PSI per questo invece del metodo SQL, e cercherò questo.

Spero che questo aiuti ... James Fraser

Altri suggerimenti

Usando la versione del 2007 del PSI, ci siamo trovati in questo stesso problema. Abbiamo deciso di sincronizzare tutte le proprietà dei metadati personalizzati in un elenco di SharePoint. Questo rende molto facile interrogare e consumare. Tuttavia, la sincronizzazione è un po 'di lavoro da mantenere.

Penso che un'alternativa sarebbe quella di interrogare il database di reporting, ma non sono stato in grado di trovare una buona fonte di informazioni per questo.

Per caricare i campi personalizzati con il caricamento di un intero di caricamento, è possibile utilizzare projecttenesi come questo readprojectità (..., 32, ...) dove 32 identifica le entità customfield

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top