2016-08-07 4 views
-3

Кнопка должна быть видимой Основана на команде. Пример. Если зарегистрированная часть пользователя «Test Team», «Test Button» должна быть включена. Если не отключить. Я использую webapi. Но это давая нулевые значения.Кнопка видна на основе команды

function GetUserTeam() { 
var clientUrl1 = Xrm.Page.context.getClientUrl(); 
var oDataPath1 = clientUrl1 + "/api/data/v8.0/"; 
var req1 = new XMLHttpRequest(); 
    try { 

    var strTest = "<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='true'>" + 
        " <entity name='team'>" + 
        " <attribute name='name' />" + 
        " <attribute name='businessunitid' />" + 
        " <attribute name='teamid' />" + 
        " <attribute name='teamtype' />" + 
        " <order attribute='name' descending='false' />" + 
        " <filter type='and'>" + 
        "  <condition attribute='teamtype' operator='eq' value='0' />" + 
        " </filter>" + 
        " <link-entity name='teammembership' from='teamid' to='teamid' visible='false' intersect='true'>" + 
        "  <link-entity name='systemuser' from='systemuserid' to='systemuserid' alias='ab'>" + 
        "  <filter type='and'>" + 
        "   <condition attribute='systemuserid' operator='eq-userid' />" + 
        "  </filter>" + 
        "  </link-entity>" + 
        " </link-entity>" + 
        " </entity>" + 
        "</fetch>"; 
    req1.open("GET", oDataPath1 + "teams?fetchXml=" + encodeURI(strTest), true); 
    req1.setRequestHeader("Accept", "application/json"); 
    req1.setRequestHeader("Content-Type", "application/json; charset=utf-8"); 
    req1.setRequestHeader("OData-MaxVersion", "4.0"); 
    req1.setRequestHeader("OData-Version", "4.0"); 
    req1.onreadystatechange = function() { 
     if (this.readyState == 4) { 
      // debugger; 
      req1.onreadystatechange = null; 
      if (this.status == 200) { 
       var reqResults = JSON.parse(this.response).value; 
       if (reqResults != null && reqResults.length > 0) { 
        if ("TestTeam"==reqResults.length[i].name){return true;} 

       else{return false;} 
       } 
        }//End of for 

       }//En of IF 

      } 

      else { 

       var error = JSON.parse(this.response).error; 
       alert(error.message); 
      } 

     } 

    };  
    req1.send();    

} 
catch (e) { 

    alert(e); 

} 

} 
+0

Это, безусловно, может быть достигнуто в Dynamics. Покажите свой код, который дает нулевые значения. –

+0

Я получил возвращаемое значение. Но кнопка не отключается/включается, когда я вызываю эту функцию с помощью кнопки ленты. –

ответ

0

Благодарим за отправку вашего образца кода. У него были некоторые синтаксические ошибки, но я предполагаю, что это потому, что вы отредактировали его для публикации. Например, цикл for отсутствовал и отсутствовали скобки.

  1. Запрос асинхронный. Undefined был возвращен из вашего метода. Вы либо хотите изменить XMLHttpRequest для синхронного запуска (как правило, не рекомендуется по причинам пользовательского опыта), либо передать обратные вызовы для вызова, когда у вас есть результат. Здесь я добавил onSuccess и onError. onSuccess будет принимать true/false как аргумент, который был найден или нет TestTeam.

  2. В вашем цикле for у вас было reqResults.length [i], где вы, возможно, имели в виду reqResults [i]. Опять же, это может быть просто проблемой редактирования для публикации.

Так что этот код вызовет onSuccess со значением true, если TestTeam является одной из команд пользователя. С ложным, если нет. Или он вызовет onError, если произошла ошибка. Вы можете отредактировать, чтобы создать массив команд для передачи назад и т. Д. Или вы можете отредактировать вызов .open(), чтобы он запускал synchronously и не использовал обратные вызовы.

function GetUserTeam(onSuccess, onError) { 
    var clientUrl1 = Xrm.Page.context.getClientUrl(); 
    var oDataPath1 = clientUrl1 + "/api/data/v8.0/"; 
    var req1 = new XMLHttpRequest(); 
    try { 

     var strTest = "<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='true'>" + 
         " <entity name='team'>" + 
         " <attribute name='name' />" + 
         " <attribute name='businessunitid' />" + 
         " <attribute name='teamid' />" + 
         " <attribute name='teamtype' />" + 
         " <order attribute='name' descending='false' />" + 
         " <filter type='and'>" + 
         "  <condition attribute='teamtype' operator='eq' value='0' />" + 
         " </filter>" + 
         " <link-entity name='teammembership' from='teamid' to='teamid' visible='false' intersect='true'>" + 
         "  <link-entity name='systemuser' from='systemuserid' to='systemuserid' alias='ab'>" + 
         "  <filter type='and'>" + 
         "   <condition attribute='systemuserid' operator='eq-userid' />" + 
         "  </filter>" + 
         "  </link-entity>" + 
         " </link-entity>" + 
         " </entity>" + 
         "</fetch>"; 
     req1.open("GET", oDataPath1 + "teams?fetchXml=" + encodeURI(strTest), true); 
     req1.setRequestHeader("Accept", "application/json"); 
     req1.setRequestHeader("Content-Type", "application/json; charset=utf-8"); 
     req1.setRequestHeader("OData-MaxVersion", "4.0"); 
     req1.setRequestHeader("OData-Version", "4.0"); 
     req1.onreadystatechange = function() { 
      if (this.readyState == 4) { 
       // debugger; 
       req1.onreadystatechange = null; 
        if (this.status == 200) { 
         var returnValue = false; 
         var reqResults = JSON.parse(this.response).value; 
         if (reqResults != null && reqResults.length > 0) { 
          for(var i = 0, j = reqResults.length; i < j; i++){ 
           if ("TestTeam" == reqResults[i].name){ 
            returnValue = true; 
            break; 
           } 
          } 
         } 

         // Call the handler 
         onSuccess && onSuccess(returnValue); 
        } 
        else { 
         var error = JSON.parse(this.response).error; 
         alert(error.message); 
         onError && onError(error); 
        } 
      } 
     };  
     req1.send(); 
    } 
    catch (e) { 
     alert(e); 
     onError && onError(e); 
    } 
} 
+0

Извините за поздний повтор. Большое спасибо, я только что изменил код u r. Теперь я могу скрыть/показать кнопку. Пожалуйста, найдите ниже пункты. Я объявил одну глобальную varibale .like var teamValu = false; , тогда я написал отдельную функцию [usehasTeam]. В том, что я проверяю значение команды null или undefined, setTimeout (usehasTeam, 500) .if Не null, я вызвал «usehasTeam» в правилах включения ленты. –

Смежные вопросы