Lawrence Liang avatar image
Lawrence Liang asked Jeanette F commented

How can I use storage.system class to call findslot method by dll maker?

Now I want to use dll marker to realize most business logics, but I can't find assignslot and findslot methods in FlexsimFuncs.h file.

How can I use storage.system class to call findslot method by dll maker before UNLOAD Task as below?

treenode ts = createemptytasksequence(rmg, 0, 0);

inserttask(ts, TASKTYPE_UNLOAD, unit, yardBlock,0,0,0,0);


FlexSim 24.1.0
c++dll makerstorage
· 1
5 |100000

Up to 12 attachments (including images) can be used with a maximum of 23.8 MiB each and 47.7 MiB total.

Jeanette F avatar image Jeanette F ♦♦ commented ·

Hi @Lawrence Liang, was Jordan Johnson's answer helpful? If so, please click the "Accept" button at the bottom of their answer. Or if you still have questions, add a comment and we'll continue the conversation.

If we haven't heard back from you within 3 business days we'll auto-accept an answer, but you can always comment back to reopen your question.

0 Likes 0 ·

1 Answer

Jordan Johnson avatar image
Jordan Johnson answered Jordan Johnson commented

I don't think you can access the storage system through the dll maker. From the manual:

Generally you can only access FlexSim's global user commands, not FlexSim's dot syntax methods and properties.

The Storage system API counts as "dot syntax" as dots are used to access methods and properties:


So you can't use that API from the DLL maker.

However, you can access that API from the Module SDK:

The FlexScript API is loosely related to the C++ API. C++ handles namespaces a little differently, and sometimes patterns in FlexScript aren't available in C++. So the line of code you need in the module SDK looks like this:

auto slot = FlexSim::StorageSystem::getInstance()->findSlot("WHERE ...");

· 2
5 |100000

Up to 12 attachments (including images) can be used with a maximum of 23.8 MiB each and 47.7 MiB total.

Lawrence Liang avatar image Lawrence Liang commented ·

Thank you for your prompt feedback!

Now, I'm try to write a method to solve it.

Please check following these codes,

void FlexSimTools::assignRackSlot(treenode rack, treenode parent,treenode item, int baySeq, int rowSeq,int tierSeq)


treenode rootNode = model();

string rackName = getname(rack);

string parentName = getname(parent);

string itemName = getname(item);

string strNodeAssignedSlot = "/" + parentName + "/" + itemName + ">stored/1/assignedSlot/1";

treenode nodeAssignedSlot = findTreeNode(rootNode, strNodeAssignedSlot);

if (nodeAssignedSlot == NULL)


treenode node1 = node("/" + parentName + "/" + itemName + ">stored", model());

treenode node2 = nodeinsertinto(node1);

nodeadddata(node2, DATATYPE_STRING);

setnodestr(node2, "assignedSlot: size = 1,");

treenode currentSlotNode = nodeinsertinto(node2);

setnodename(currentSlotNode, "currentSlot");

nodeadddata(currentSlotNode, DATATYPE_NUMBER);

setnodenum(currentSlotNode, 0);

treenode node3 = nodeinsertinto(node2);

setnodename(last(node2), "assignedSlot");

nodeadddata(node3, DATATYPE_NUMBER);

setnodenum(node3, 0);


nodeAssignedSlot = last(node3);


nodeadddata(nodeAssignedSlot, DATATYPE_STRING);


"/" + rackName + ">variables/bays/" + to_string(baySeq) +"/levels/" + to_string(rowSeq) + "/slots/1/slotItems/" + to_string(tierSeq));


0 Likes 0 ·
Jordan Johnson avatar image Jordan Johnson ♦♦ Lawrence Liang commented ·

The code looks like you are trying to assign an item to a slot, but you are doing it without using the API. Try something like this:

auto slot = FlexSim::StorageSystem::getInstance()->findSlot("WHERE ...");
if (slot) {
    StorageObject::Item* storageItem = StorageObject::assertItem(item);
    storageItem->assignedSlot = slot;
0 Likes 0 ·