У меня возникла проблема проверки наличия определенного структурного ключа и данных с помощью structKeyExists().Каков правильный синтаксис для проверки наличия структурного ключа и данных?
Я хочу, чтобы мои результаты запроса будут сохранены в структурах, как это:
APPLICATION.MemQs.ProdCountQs[1].ExpirationDate;
APPLICATION.MemQs.ProdCountQs[1].ProdCount;
APPLICATION.MemQs.ProdCountQs[2].ExpirationDate;
APPLICATION.MemQs.ProdCountQs[2].ProdCount;
APPLICATION.MemQs.ProdCountQs[3].ExpirationDate;
APPLICATION.MemQs.ProdCountQs[3].ProdCount;
// CREATE MEMORY QUERIES ~ works great
if (structKeyExists(APPLICATION, "MemQs") == false) {
APPLICATION.MemQs = structNew();
}
// CREATE PRODUCT COUNT QUERIES ~ works great
if (structKeyExists(APPLICATION.MemQs, "ProdCountQs") == false) {
APPLICATION.MemQs.ProdCountQs= structNew();
}
// fails the test ~ always recreates variables
if (structKeyExists(APPLICATION.MemQs, "ProdCountQs[SomeID]") == false) {
APPLICATION.MemQs.ProdCountQs[SomeID] = structNew();
APPLICATION.MemQs.ProdCountQs[SomeID].ExpirationDate = now();
APPLICATION.MemQs.ProdCountQs[SomeID].ProdCount = 0;
}
// fails the test ~ always recreates variables
if (structKeyExists(APPLICATION.MemQs.ProdCountQs, "[SomeID]") == false) {
APPLICATION.MemQs.ProdCountQs[SomeID] = structNew();
APPLICATION.MemQs.ProdCountQs[SomeID].ExpirationDate = now();
APPLICATION.MemQs.ProdCountQs[SomeID].ProdCount = 0;
}
// fails the test ~ always recreates variables
if (structKeyExists(APPLICATION.MemQs.ProdCountQs, "SomeID") == false) {
APPLICATION.MemQs.ProdCountQs[SomeID] = structNew();
APPLICATION.MemQs.ProdCountQs[SomeID].ExpirationDate = now();
APPLICATION.MemQs.ProdCountQs[SomeID].ProdCount = 0;
}
// throws error
// APPLICATION.MemQs.ProdCountQs[SomeID], must be a syntactically valid variable name
if (isDefined("APPLICATION.MemQs.ProdCountQs[SomeID]") == false) {
APPLICATION.MemQs.ProdCountQs[SomeID] = structNew();
APPLICATION.MemQs.ProdCountQs[SomeID].ExpirationDate = now();
APPLICATION.MemQs.ProdCountQs[SomeID].ProdCount = 0;
}
Итак, как же я использую structKeyExists() для проверки существования
APPLICATION.MemQs.ProdCountQs[SomeID]
* Вам нужно положить Фунт ## знаки вокруг SomeID так как это переменная. * Стоит отметить, что только потому, что имя переменной заключено в кавычки, поэтому она рассматривается как буквальная строка вместо имени переменной. Опустите кавычки, и CF обработает 'SomeID' как переменную. Кроме того, хотя использование «== false» работает, использование «!» Короче. т.е. 'if (! structKeyExists (APPLICATION.MemQs.ProdCountQs, SomeID)) {...}' – Leigh
Я положил знаки фунта вокруг переменной, и он отлично работал. Благодаря! structKeyExists (APPLICATION.MemQs.ProdCountQs, "#IDID #") == false) –
@Leigh. Правильно. Я изменяю свой код, чтобы отразить его. – Pankaj