this.viewer.model.getExternalIdMapping(data => console.log(data))
Esta línea en particular lo consigue todo. Pero solo necesito los dbIds de ciertos externalIds. ¿Cómo puedo hacer eso?
Algunas formas dependiendo de lo que necesites exactamente. Esto es lo que he hecho.
function getDbIdFromExternalId(externalIds) { return new Promise((resolve) => { viewer.model.getExternalIdMapping((d) => { //console.log("getDbIdFromExternalId Executed"); let responseArr = []; externalIds.forEach(externalId => { if(d[externalId]) responseArr.push([d[externalId], externalId]); }); resolve(responseArr); }); }); } /*Your external IDs in here*/ var externalIds = ['23287','23292','23291']; /*response is set here*/ var response = await getDbIdFromExternalId(externalIds);
Valor esperado de response
(con mi visor de autocad): [[39675,"23292"],[39674,"23291"]]
De esa manera puedes ver a la pareja. Observe que ingresé un valor que no se asignó a nada, por lo que la matriz solo se llenó con lo que encontró.
Otra opción sería implementar su propia función de usuario y llamar al método getExternalIdMapping de la base de datos de propiedades que en realidad se puede filtrar para identificaciones externas específicas:
function mapMyExternalIds(model, externalIds) { const filter = {}; for (const externalId of externalIds) { filter[externalId] = true; } return model.getPropertyDb().executeUserFunction(function userFunction(pdb, filter) { return pdb.getExternalIdMapping(filter); }, filter); }
Entonces puedes usarlo así:
mapMyExternalIds(NOP_VIEWER.model, ["6949fe39-3e9a-4d4d-b7fe-71339c615138-00022318"]) .then(map => console.log(map)) .catch(err => console.error(err));