It doesnt have to be a real field - button bindings are made-up like Epicor I just name mine usually TheTableName.btnMyButtonName you have to type it in, unlike a textbox it is not validated and can be used with RowRule engine. It’s the same way Epicor does it.
Even if you don’t use a RowRule the button automatically becomes disabled when there is no record loaded for TableName