Remove the outer leaves of the artichokes so that only the tender inner leaves remain. Bring a pot of water to boil, add the trimmed artichokes and simmer for 15 minutes. Remove artichokes, let cool, then slice in half in order to scoop out the chokes with a small spoon. Reserve hearts.
Preheat oven to 350 degrees F.
Heat the olive oil in a large casserole, add the lamb shanks and saute until browned on all sides, about 15 minutes. Transfer lamb shanks to a shallow roasting pan and scatter the onions and garlic in the pan. Pour in the meat stock, and roast for 30 minutes.
Place a small saucepan over low heat, add the ham and saute until lightly browned, 7 to 10 minutes. Add the artichokes to the lamb, baste the meat and artichokes with the accumulated juices, and roast for another 10 minutes. Add the ham and roast another 5 minutes, or until lamb is desired doneness. Remove lamb from oven, let rest a few minutes, then serve warm.